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)
  • 相关阅读:
    多线程中变量的内存分配
    VS2019解决Cannot resolve symbol ' '问题
    排序算法——选择排序
    观察者模式
    c# 之linq——小白入门级
    c# 迭代器
    MySql学习
    rabbitmq安装及简单demo练习
    VMware Workstation 12 PRo密钥
    远程过程调用——RPC
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/10809061.html
Copyright © 2011-2022 走看看