Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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:two";“收益率”;s在一个函数中_Python_Yield_Coroutine - Fatal编程技术网

Python:two";“收益率”;s在一个函数中

Python:two";“收益率”;s在一个函数中,python,yield,coroutine,Python,Yield,Coroutine,我们在Python的yield上发现了一个有趣的问题。我们编写了一个简单的程序: def F(): for i in range(5, 9): for j in range(21, 29): x = yield i y = (yield j) * 100 x += y print '>>>', x gen = F() next(gen) a1 = gen.s

我们在Python的
yield
上发现了一个有趣的问题。我们编写了一个简单的程序:

def F():
    for i in range(5, 9):
        for j in range(21, 29):
            x = yield i
            y = (yield j) * 100
            x += y
            print '>>>', x

gen = F()
next(gen)
a1 = gen.send(66)
a2 = gen.send(77)
print a1
print a2
结果是惊人的:

>>> 7766
21
5
i=5,j=21=>收益率i=>a1=21=>send(66)=>x=66

i=5,j=21=>收益率j=>a2=5=>send(77)=>y=7700

打印7766

打印21

打印5

i、 e.在
收益率i
之后,
a1
获得
j
的值;在
yield j
之后,
a2
获取
i
的值

有人知道你为什么这样做吗?为什么a1=5,a2=21?

下一个(gen)
调用从第一个
产生i
返回的方法。您的
a1=gen.send(66)
然后在
y=(收益率j)*100处恢复该方法,并从此处产生
j
a2=gen.send(77)
行随后直接恢复该方法,并从
x=yield i

next(gen)
调用该方法,该方法从第一个
yield i
返回。您的
a1=gen.send(66)
然后在
y=(收益率j)*100处恢复该方法,并从此处产生
j
a2=gen.send(77)
行随后直接恢复该方法,并从
x=yield i
返回
next(gen)
从生成器中获取第一个元素(
i
):

那么
gen.send(66)
等于
j
(即21)。由于第二个循环仍在工作,因此后续的
gen.send(77)
等于
i
(仍然是5)

从本质上讲,问题是您使用3个值,而不是2个值

使用或
next(gen)
启动发电机:

a1 = gen.send(None) # or a1 = next(gen)
a2 = gen.send(77)
print(a1, a2) # prints 5 21
next(gen)
从生成器中获取第一个元素(
i
):

那么
gen.send(66)
等于
j
(即21)。由于第二个循环仍在工作,因此后续的
gen.send(77)
等于
i
(仍然是5)

从本质上讲,问题是您使用3个值,而不是2个值

使用或
next(gen)
启动发电机:

a1 = gen.send(None) # or a1 = next(gen)
a2 = gen.send(77)
print(a1, a2) # prints 5 21

@AshwiniChaudhary很抱歉没有执行next()函数。@AshwiniChaudhary很抱歉没有执行next()函数。