迭代器、生成器

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__())

 

posted @ 2018-07-22 10:43  fight139  阅读(97)  评论(0编辑  收藏  举报