Python 3.x 表达方式是什么;a=f的收益率();什么意思?
下面是一个python表达式:Python 3.x 表达方式是什么;a=f的收益率();什么意思?,python-3.x,yield,yield-from,Python 3.x,Yield,Yield From,下面是一个python表达式: a = yield from f() 这是什么意思?在哪里可以使用?f应该是什么样的对象?计算表达式后,a的值是多少 这里有几个关于python的yield和yield from的问题,但是我没有找到答案 我理解yield x、y=yield和y=yield x的含义。甚至f()的收益率也或多或少可以理解。但是a=f()的收益率对我来说是意想不到的 更新: 巴比里提供了正确的答案。但我还是需要有点不同的表述 表达式a=yield from f()的语义与函数调用
a = yield from f()
这是什么意思?在哪里可以使用?f
应该是什么样的对象?计算表达式后,a
的值是多少
这里有几个关于python的yield
和yield from
的问题,但是我没有找到答案
我理解yield x
、y=yield
和y=yield x
的含义。甚至f()的收益率也或多或少可以理解。但是a=f()的收益率对我来说是意想不到的
更新:
巴比里提供了正确的答案。但我还是需要有点不同的表述
表达式a=yield from f()
的语义与函数调用非常相似:a
的值将是f()
返回的值。但是如果f()
产生任何结果,则产生的值将被转发到“上层”(您只能在函数内部写入a=yield from f()
,这将使您成为一个生成器)。如果在此之后,“上层”将值发送回生成器,则该值将转发到f()
,并且f()
将继续
来自
的屈服允许f()
和“上层”在函数运行时进行通信
我想现在我确实明白了这个从
中产生的是什么,希望这个解释能对其他人有所帮助。根据:
f
应该是一个生成器(这并不奇怪)
f
应该返回(而不仅仅是屈服)
f
应使用some\u 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
- 通过
send
发送到g
的每个值都将转发到f
注意:您需要先启动生成器,然后才能向其发送内容
o = g()
next(o) # Ensure the accumulator is ready to accept values
我还没有测试过所有东西,如果有什么不清楚的地方,请毫不犹豫地发表评论。下面是一个非常简单的例子(yield from
只能在函数内部使用)
a
被分配函数f()
返回的值。生成器g
生成所有中间结果
f
必须是一个生成器(产生的东西)
a
将被简单地分配f()的返回值
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