表达式“a =从f()产生的收益率”是什么意思?

问题描述 投票:2回答:2

所以,这是一个python表达式:

a = yield from f()

这是什么意思?哪里可以使用? f应该是什么样的对象?评估表达式后,a的价值是多少?

关于python的yieldyield from的stackoverflow有几个问题,但我没有找到答案。

我理解yield xy = yieldy = 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是什么,并希望这个解释对其他人有帮助。

python-3.x yield yield-from
2个回答
3
投票

这是一个非常简单的例子(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必须是一个发电机(yields的东西)。
  • a将被简单地分配f()的返回值

2
投票

the documentation说:

  • f应该是一个发电机(这并不奇怪)
  • f应该返回(而不仅仅是收益率)
  • f应该使用send接受来自some_var = yield的价值
  • qazxsw poi将获得qazxsw poi返回的价值

这是一个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

我没有测试过一切,如果有什么不清楚的话,请不要犹豫。

© www.soinside.com 2019 - 2024. All rights reserved.