Python3 generator 生成器

此文为学习廖雪峰python教程笔记

在Python中,这种一边循环一边计算的机制,称为生成器:generator。

方法一:要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的 [] 改成 (), 就创建了一个generator。

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
 at 0x1022ef630>

创建L 和g 的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。如果要一个一个打印出来generator的元素,可以通过next()函数获得generator的下一个返回值; 当然,这种不断调用next(g)实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象:

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)
... 
0
1
4
9
16
25
36
49
64
81

方法二:fib函数实际上是定义了斐波拉契数列的推算规则,要把fib函数变成generator,只需要把print(b)改为yield b就可以了:

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

这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

你可能感兴趣的:(Python3 generator 生成器)