【发布时间】:2017-09-09 03:41:34
【问题描述】:
是否可以嵌套yield from 语句?
简单的形式很明显:
def try_yield1():
x = range(3)
yield from x
产生:
0
1
2
但是如果我有嵌套的生成器呢?
def try_yield_nested():
x = [range(3) for _ in range(4)]
yield from ((yield from y) for y in x)
这会产生:
0
1
2
None # why?
0
1
2
None # ...
0
1
2
None # ...
如果我使用yield from(即使它是嵌套的),为什么它会产生None?
我知道我可以这样做:
from itertools import chain
def try_yield_nested_alternative():
x = [range(3) for _ in range(4)]
yield from chain.from_iterable(x)
这会产生相同的输出而忽略了None(这是我所期望的)。我也可以写一个简单的循环:
for x in [range(3) for _ in range(3)]:
yield from x
但是,我认为使用嵌套委托会更加 Pythonic(最好是 yield from x from y 或 yield from x for x in y,但这不是正确的语法)。为什么它没有按我的预期工作?
【问题讨论】:
标签: python python-3.x generator yield yield-from