Python 产量和产量-你能把它们结合起来吗?
刚刚了解了来自构造的Python 产量和产量-你能把它们结合起来吗?,python,Python,刚刚了解了来自构造的收益率,我认为这有点像反向的收益率,而不是从生成器中获取对象,而是插入/发送对象到生成器。比如: def foo(): while True: x = (yield) print(f'{x=}') f = foo() f.send(None) for i in range(4): f.send(i) 收益率: x=0 x=1 x=2 x=3 所以我想知道你是否能把两者结合起来 def foo(): while Tr
收益率,我认为这有点像反向的收益率
,而不是从生成器中获取对象,而是插入/发送对象到生成器。比如:
def foo():
while True:
x = (yield)
print(f'{x=}')
f = foo()
f.send(None)
for i in range(4):
f.send(i)
收益率:
x=0
x=1
x=2
x=3
所以我想知道你是否能把两者结合起来
def foo():
while True:
x = (yield)
print(f'{x=}')
yield x + 1000
f = foo()
f.send(None)
for i in range(4):
print(f'y={f.send(i)}')
那么我会期待
x=0
y=1000
x=1
y=1001
x=2
y=1002
x=3
y=1003
但我明白了
x=0
y=1000
y=None
x=2
y=1002
y=None
任何人都可以解释这一点。如果你“将两者结合起来”,将收益率
视为一个发送值,然后从外部接受值的单一点是很有用的。这样,您可能会理解为什么不在输出中每隔三行打印“x=”和“getNone
s”一行。这是因为控件在while
块中的每个循环中出现两次foo(…)
以下是您的代码的固定版本:
def foo():
x = 0
while True:
x = (yield x + 1000)
print(f'{x=}')
f = foo()
f.send(None)
for i in range(4):
print(f'y={f.send(i)}')
注意f'{x=}'
仅适用于Python 3.8+版本。foo()中的一个yield同时执行两个函数:获取值和发送值。通过调试器运行它,我可以看到发生了什么。函数foo似乎首先从i获取值并打印它,然后它转到x=yield(x+1000)行并返回值为x+1000的循环。如果我在打印之前添加行x=x*2,结果是x=0,y=1000,x=2,y=1002,x=4,y=1004,x=6,y=1006。