最近看新项目代码里有好多的yield,之前由于很少用,所以对其不慎了解,学习之。
yield就是一个生成器,也可以理解为自定义的迭代器,需要你每次调用next()或者是send()方法才能执行下去,直到碰到下一个yield。执行一个 send(msg) 会恢复 generator 的运行,然后发送的值将成为当前 yield 表达式的返回值。然后 send() 会返回下一个被 generator yield 的值,如果没有下一个可以 yield 的值则引发一个异常。
那么可以看过这其实包含了一次运行,从将msg赋给当前被停住的 yield 表达式开始,到下一个 yield 语句结束,然后返回下一个yield语句的参数,然后再挂起,等待下一次的调用。看例子
>>> def tt():
... print 'hello'
... a = yield 5
... b = a +2
... print b
... print "cc"
... c = yield 6
... print 'dd'
... b = b + 2
... print b
>>> x = tt()
>>> x.next()
hello
5
>>> x.send(8)
10
cc
6
>>> x.send(7)
dd
12
Traceback (most recent call last):
File "<pyshell#71>", line 1, in <module>
x.send(7)
StopIteration
>>>