zoukankan      html  css  js  c++  java
  • 测开之路二十二:迭代器、生成器

    迭代器

    StopIteration:停止迭代

     

    class Cup(object):

    def __init__(self):
    ''' 初始化函数,索引和数据初始化。 '''
    self.index = 0
    self.good = [1, 3, 5, 6]

    def __iter__(self):
    ''' 这里固定返回对象自身self '''
    return self

    def __next__(self):
    '''
    这里每次返回一个元素,需要自己写个循环。
    最后当数据取完时一定要抛出StopIteration这个异常。
    '''
    # print(self.index)
    if self.index < len(self.good):
    data = self.good[self.index]
    self.index += 1
    return data
    else:
    raise StopIteration

    cup = Cup()
    for c in cup:
    print(c)

    迭代器实现斐波那契

    class Fibonacci(object):

    def __init__(self, n):
    self.n = n # 斐波那契有N项
    self.index = 0 # 迭代器遍历时的索引
    self.iterator = [0, 1] # 列表法生成斐波那契数列
    for i in range(2, self.n + 1):
    self.iterator.append(self.iterator[i - 1] + self.iterator[i - 2])
    def __iter__(self):
    ''' 这里固定返回对象自身self '''
    return self
    def __next__(self):
    if self.index <= self.n:
    data = self.iterator[self.index]
    self.index += 1
    return data
    else:
    raise StopIteration

    if __name__ == '__main__':
    fib = Fibonacci(5)
    for f in fib:
    print(f)

    生成器

    生成器表达式

    生成器函数,yield返回表达式对象,不计算值,在大量数据的时候,占用很少内存

    生成器实现斐波那契

    class Fibonacci(object):

    def __init__(self, n):
    self.n = n # 斐波那契有N项
    self.index = 0 # 迭代器遍历时的索引
    self.iterator = [0, 1] # 列表法生成斐波那契数列
    for i in range(2, self.n + 1):
    self.iterator.append(self.iterator[i - 1] + self.iterator[i - 2])

    def generator(self):
    for i in self.iterator:
    yield i

    if __name__ == '__main__':
    fib = Fibonacci(5)
    gen = fib.generator()
    for g in gen:
    print(g)
  • 相关阅读:
    CSS3 渐变 透明 圆角
    使用JSON作为函数的参数(转载)
    如何让输入的单词首字母大写
    mysql 修改表/字段 增加/删除表索引
    Jquery Mobile 客户端验证
    如何写出漂亮的js代码(转载)
    GoogleMap添加一个Marker
    Log4j的使用【转载】
    Google Map 自定义infowindow
    MYSQL重装出现could not start the service mysql error:0处理(已验证可以使用)
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/10809061.html
Copyright © 2011-2022 走看看