Python 3 生成器 ( generator )
Python 中的生成器是一个返回迭代器的函数,主要用于惰性求值
Python 将使用了 yield 的函数被称为生成器 ( generator )
跟普通函数不同的是,生成器只能用于迭代操作
调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值,并在下一次执行 next() 方法时从当前位置继续运行
下面的代码使用 yield 实现斐波那契数列
def fibonacci(n): # 生成器函数 - 斐波那契 a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a + b counter += 1 f = fibonacci( 10 ) # f 是一个迭代器,由生成器返回生成
我们可以使用 type() 函数查看 f 的类型,发现是一个生成器类
>>> f <generator object fibonacci at 0x112a397d8> >>> type(f) <class 'generator'>
然后我们就可以向使用迭代器一样使用生成器 f
while True: e = next(f,None) if e: print (e, end=" ") else: break
运行以上 Python 代码,输出结果如下
0 1 1 2 3 5 8 13 21 34 55
简单的迭代器
我们知道下面的语句可以创建一个序列
[x*x for x in range(5)]
如果把中括号改成小括号,就会返回一个生成器了
(x*x for x in range(5))
演示如下
>>> x = [x*x for x in range(5)] >>> x [0, 1, 4, 9, 16] >>> x = (x*x for x in range(5)) >>> x <generator object <genexpr> at 0x112af3eb8> >>> type(x) <class 'generator'>