yield from
文をネストすることはできますか?なぜネスティングの "yield from"ステートメント(ジェネレータ委譲)が `None`値の終了を生成しますか?
シンプルな形は明白です:私は発電機を入れ子にしている
0
1
2
しかし、どのような場合:生成
def try_yield1():
x = range(3)
yield from x
?
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
を生成していますか?
私はのような何かを行うことができます知っている:(私が期待するものである)None
を残し、同じ出力を生成し
from itertools import chain
def try_yield_nested_alternative():
x = [range(3) for _ in range(4)]
yield from chain.from_iterable(x)
を。私はまた、単純なループ書き込むことができます。
for x in [range(3) for _ in range(3)]:
yield from x
をしかし、私はネストされた委任を使用することがより神託のだろうと思った(好ましくさえyield from x from y
またはyield from x for x in y
が、それは正しい構文ではありません)。なぜ私は期待どおりに動作していないのですか?