Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 表达方式是什么;a=f的收益率();什么意思?_Python 3.x_Yield_Yield From - Fatal编程技术网

Python 3.x 表达方式是什么;a=f的收益率();什么意思?

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()的语义与函数调用

下面是一个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
的值将是
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