标签:
生成器是generator,就是指带有关键字yield的函数。
它与一般函数不同点在于:
1、函数调用返回迭代子iterator,迭代子可以理解为一系列的值
>>> def func(): ... yield 1 ... >>> a = func() >>> a <generator object func at 0x01786918>
2、迭代子每次只能拿到一个值,若想拿下一个值,通过调用next;对于for循环,next是被隐式调用
3、每次调用next是从上一个yield处开始执行,而且现场环境是和上一次相同
相同点在于:
1、yield类似return
应用场景:
由于生成器产生值的方法是每次只产生一个,不停调用next,才会继续产生后面的。所以,它特别适用于产生一系列数量非常多的值。
1、配合while True之类的,可以产生无限个数
def get_primes(number): while True: if is_prime(number): yield number number += 1
2、配合阻塞函数,可以产生停动停动的模型
def func(): xx.read(block=True) ....... yield n for i in func(): .......
参考:https://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/
标签:
原文地址:http://www.cnblogs.com/johnchow/p/4792362.html