迭代器、生成器

1.列表生成式

In [3]: arr = [i*10 for i in range(10)]

In [4]: arr
Out[4]: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

2.生成器

对于arr = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]这种每个元素都可以根据某种算法推算出来,没有必要占用内存空间。

一遍循环,一遍计算--生成器(generator)

 创建generator:

方法一:把[]换成()   ,只能用一次,用于迭代

In [12]: arr = (i*10 for i in range(10))

In [13]: for i in arr:
    ...:     print(i, end=',')
0,10,20,30,40,50,60,70,80,90,
In [14]: for i in arr:
    ...:     print(i, end=',')

In [15]:

方法二:使用函数作为算法,yield

当调用f.__next__()时,才会执行fib方法,执行到yield时会停下来,并返回结果。下一次调用f.__next__()时,会从上次的yield开始,继续执行,并且保存了运行环境

def fib(max):
    n, a, b = 0, 0, 1
    while max > n:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

if __name__ == '__main__':
    f = fib(3)
    print(f)
    print(f.__next__())
    print(',')
    print(f.__next__())
    print(',')
    print(f.__next__())
原文地址:https://www.cnblogs.com/zhuxiang1633/p/9349346.html