我很熟悉屈服回报价值主要归功于这个问题
但是当它在作业的右侧时,屈服会做什么?
@coroutine
def protocol(target=None):
while True:
c = (yield)
def coroutine(func):
def start(*args,**kwargs):
cr = func(*args,**kwargs)
cr.next()
return cr
return start
Run Code Online (Sandbox Code Playgroud)
在研究状态机和协同程序时,我在本博客的代码示例中遇到了这个问题.
Ten*_*she 36
yield函数中使用的语句将该函数转换为"生成器"(一个创建迭代器的函数).生成的迭代器通常通过调用恢复next().但是,可以通过调用方法send()而不是next()恢复它来向函数发送值:
cr.send(1)
Run Code Online (Sandbox Code Playgroud)
在您的例子,这会赋值1给c各一次.
cr.next() 实际上相当于 cr.send(None)
dus*_*san 11
您可以使用该send功能将值发送到生成器.
如果你执行:
p = protocol()
p.next() # advance to the yield statement, otherwise I can't call send
p.send(5)
Run Code Online (Sandbox Code Playgroud)
然后yield将返回5,所以在发电机内c将是5.
此外,如果你打电话p.next(),yield将返回None.
您可以在此处找到更多信息.
| 归档时间: |
|
| 查看次数: |
3944 次 |
| 最近记录: |