作为作业的收益是什么?myVar =(收益率)

Fir*_*row 30 python yield

我很熟悉屈服回报价值主要归功于这个问题

但是当它在作业的右侧时,屈服会做什么?

@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)

在您的例子,这会赋值1c各一次.

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.

您可以在此处找到更多信息.