所以,这是一个python表达式:
a = yield from f()
这是什么意思?哪里可以使用? f
应该是什么样的对象?评估表达式后,a
的价值是多少?
关于python的yield
和yield from
的stackoverflow有几个问题,但我没有找到答案。
我理解yield x
,y = yield
和y = yield x
的含义。甚至yield from f()
或多或少都是可以理解的。但a = yield from f()
对我来说意外。
更新:
B. Barbieri提供了正确的答案。我仍然需要以不同的方式制定它。
表达式a = yield from f()
的语义与函数调用非常相似:a
的值将是f()
返回的值。但是如果f()
产生任何东西,产生的值将被转发到“上层”(你只能在函数内写a = yield from f()
,这将使你成为一个生成器)。如果在此之后“上层”将值返回给您的生成器,则该值将被转发到f()
并且f()
将继续。
yield from
允许f()
和“上层”在你的功能运行时进行通信。
我想我现在明白这个yield from
是什么,并希望这个解释对其他人有帮助。
这是一个非常简单的例子(yield from
只能在函数内部使用)
def f():
for i in range(2):
yield i
return 3
def g():
a = yield from f()
print('a = {}'.format(a))
for item in g():
print(item)
# output:
# 0
# 1
# a = 3
a
被赋值为f()
函数返回的值。生成器g
产生所有中间结果。
f
必须是一个发电机(yield
s的东西)。a
将被简单地分配f()
的返回值f
应该是一个发电机(这并不奇怪)f
应该返回(而不仅仅是收益率)f
应该使用send
接受来自some_var = yield
的价值这是一个a
的例子:
f
考虑一个发电机f
:
def f():
while 1:
x = yield
if next is None:
return "something"
do_something_with_recieved_value(x)
g
返回时,返回的值都会被放入l = []
def g():
while True:
a = yield from f()
l.append(a)
f
发送给l
的每个值都将转发给g
注意:你需要启动你的发电机才能使send
它。
f
我没有测试过一切,如果有什么不清楚的话,请不要犹豫。