여기에 무슨 일이 일어나고 있는지 궁금합니다. 발전기와 코 루틴을 아는 사람이이 코드를 잘 설명 할 수 있습니까?파이썬 :이 생성기로 무슨 일이 일어나는지 이해하지 못합니다.
def b():
for i in range(5):
yield i
x = (yield)
print(x)
def a():
g = b()
next(g)
for i in range(4):
g.send(5)
print(next(g))
a()
출력
None
1
None
2
None
3
None
4
하지만 라인 3과 4의 주위에 전환 할 때 : 선 yield i
및 x = (yield)
을, 나는 다음을 얻을.
5
None
5
None
5
None
5
None
yield 함수를 사용하여 동일한 함수에서 값을 보내고 보내는 데 문제가 있다고 생각합니다. 파이썬에서는 이것이 불가능합니까?
나는 coroutines를 사용하는 몇 가지 프로그램을 성공적으로 작성하여 작동 방식에 익숙하지만이 코드 스 니펫이 작동하는 방식에 대해 혼란 스럽습니다. 이것에 대한 통찰력은 인정 될 것이다.
감사
편집 : 감사 BrenBarn과 답변 unutbu. 여기서 일어나는 일은 문제를 그렇게 확장 할 때 더 합리적입니다.
def b():
for i in range(5):
yield i
x = yield None
def a():
g = b()
print('* got', g.send(None))
for i in range(4):
print('+ got', g.send(5))
print('- got', g.send(None))
a()
감사합니다. g.send (5) 결과를 출력하지 않아서 혼란 스러웠습니다. 나는 또한'x = yield '가'x = yield None'과 같은 것을 잊었다. –