def h():
print 'Wen Chuan',
m = yield 5 # Fighting!
print m
d = yield 12
print 'We are together!'
c = h()
m = c.next() #m gets the value of yield 5
d = c.send('Fighting!') #d gets the value of yield 12
print 'We will never forget the date', m, '.', d
请检查上面的代码。 它的运行结果如下:
>>> ================================ RESTART ================================
>>>
Wen Chuan Fighting!
We will never forget the date 5 . 12
根据我的理解,第一个收益率返回值更改为“Fighting
!”已经,但为什么以后print m
仍显示值5?
答案 0 :(得分:2)
不,你没有改变yield 5
表达式使生成器生成的内容。
.send()
会更改m
中的本地h()
仅设置为的内容。
会发生什么:
h()
,生成器函数,并冻结执行。.next()
。恢复执行,打印'Wen Chuan'
并运行代码直到yield 5
表达式。系统会返回5
并将其分配给全局m
。发电机再次暂停。c.send('Fighting!')
。执行恢复,'Fighting!'
被分配给生成器函数中的局部变量m
,print m
打印出来。 yield 12
已执行,生成器已暂停,12
已分配给全局变量d
。'We will never forget the date', 5, '.', 12
已打印。此时,生成器功能仍处于暂停状态,并且永远不会执行生成器功能的最后一行。如果您再次致电.next()
,则会打印'We are together!'
,生成器结束并StopIteration
将被提升。
答案 1 :(得分:1)
m
是不相互影响的不同变量。