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)
:
는 내가 뭔가를 할 수있어. 나는 중첩 된 위임을 사용하는 것이 더 파이썬 것이라고 생각 (바람직도 yield from x from y
또는 yield from x for x in y
을, 그러나 그것은 올바른 구문되지 않습니다),
for x in [range(3) for _ in range(3)]:
yield from x
그러나 : 나는 또한 간단한 루프를 작성할 수 있습니다. 내가 예상 한대로 작동하지 않는 이유는 무엇입니까?