为什么收益率回报值会这样变化?

2024-09-29 07:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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?你知道吗


Tags: ofthedatevaluedefwillweprint
2条回答

m函数的内部和外部是互不影响的不同变量。你知道吗

不,您没有更改yield 5表达式使生成器生成的内容。你知道吗

.send()将更改m内部的本地h()将设置为only的内容。你知道吗

结果是:

  • 创建h(),一个生成器函数,执行被冻结。你知道吗
  • 在生成器上调用.next()。继续执行,打印'Wen Chuan',代码运行到yield 5表达式。5返回并分配给全局m。发电机再次暂停。你知道吗
  • 你叫c.send('Fighting!')。执行被恢复,'Fighting!'被分配给生成器函数中的局部变量mprint m打印它。yield 12被执行,生成器被暂停,12被分配给全局变量d。你知道吗
  • 'We will never forget the date', 5, '.', 12已打印。你知道吗

此时,生成器函数仍然暂停,并且生成器函数的最后一行永远不会执行。如果要再次调用.next(),则'We are together!'将被打印,生成器端和StopIteration将被提升。你知道吗

相关问题 更多 >