wangwengwu 发表于 2017-5-1 06:14:35

python之yield学习

  最近看新项目代码里有好多的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
>>>
  
 
 
页: [1]
查看完整版本: python之yield学习