【发布时间】:2021-04-07 18:58:56
【问题描述】:
我了解yield 关键字的作用。但是here 我找到了一个yield 用法的例子,这让我很沮丧:
@defer.inlineCallbacks
def doStuff():
result = yield takesTwoSeconds()
nextResult = yield takesTenSeconds(result * 10)
defer.returnValue(nextResult / 10)
这是一个Twisted 的例子。这是(如作者所述)yield 用于异步工作或类似的东西。我决定用非异步的简单代码来测试它:
import random
def func():
return random.randint(0, 10)
def foo():
while True:
x = yield func()
print("'x' value is", x)
f = foo()
for i in range(0, 3):
print(next(f))
我得到了输出:
6
'x' value is None
0
'x' value is None
7
那么为什么我得到None 的yield/return 函数值,而作者的例子(上面提到的)得到了正确的值并将其插入到下一个表达式中?
【问题讨论】:
-
好吧
send的东西。再次阅读其他问题及其答案。 -
@superbrain 做到了,但没有得到任何结果。由于作者示例中没有前后上下文。 “嗯
send某事”好多了。 -
是的,他们的 Twisted 示例没有显示发送,但他们的解释性示例及其使用演示可以。发送是问题的重点。此外,the documentation 会告诉您有关
next和None和send的信息。 -
@superbrain 对于有经验的程序员来说可能很明显,但对于新手来说却不是。但是我会把你的“成为 Python 专业人士,学习所有框架然后提出问题”标记为学习的好点,谢谢