所以,这是一个python表达式:
a = yield from f()
这是什么意思?哪里可以使用? f
应该是什么样的对象?评估表达式后a
的值是多少?
关于python' s yield
和yield from
的stackoverflow有几个问题,但我没有找到答案。
我理解yield x
,y = yield
和y = yield x
的含义。甚至yield from f()
或多或少都是可以理解的。但a = yield from f()
对我来说意外。
更新
B中。芭比里提供了正确的答案。我仍然需要以不同的方式制定它。
表达式a = yield from f()
的语义与函数调用非常相似:a
的值将是f()
返回的值。但是如果f()
产生任何结果,则产生的值将被转发到"更高级别" (你只能在函数内写a = yield from f()
,这将使你成为一个生成器。如果在那之后"上层"将值发回给您的生成器,该值将转发到f()
,f()
将继续。
yield from
允许f()
和"更高级别"在功能运行时进行通信。
我想我现在明白这个yield from
到底是什么,希望这个解释对其他人有所帮助。
答案 0 :(得分:2)
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
注意:您需要先启动您的生成器才能send
。
o = g()
next(o) # Ensure the accumulator is ready to accept values
我已经测试了所有内容,如果有任何不清楚的地方,请不要犹豫。
答案 1 :(得分:2)
这是一个非常简单的例子(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()