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?你知道吗
m
函数的内部和外部是互不影响的不同变量。你知道吗不,您没有更改
yield 5
表达式使生成器生成的内容。你知道吗.send()
将更改m
内部的本地h()
将设置为only的内容。你知道吗结果是:
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
将被提升。你知道吗相关问题 更多 >
编程相关推荐