生成器
生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器)。
如果一个函数包含yield关键字,这个函数就会变为一个生成器。
生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。
由于生成器也是一个迭代器,那么它就应该支持next方法来获取下一个值。
通过yield来创建生成器
1
2
3
def func():
for i in xrange(10);
yield i
通过列表来创建生成器
1
(i for i in range(10))
next() 与 send(msg)
next()语句将恢复生成器执行,并直到下一个yield表达式处。
send()可以传递yield表达式的值进去
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> def func():
... n = 0
... while 1:
... n = yield n #可以通过send函数向n赋值
...
>>> f = func()
>>> f.next() # 默认情况下n为0
0
>>> f.send(1) #n赋值1
1
>>> f.send(2)
2
>>>