생성기 내부 반환: Python 3.3 혁신
이전 Python 버전에서는 동일한 함수 정의 내에서 return과 Yield를 모두 사용하는 결과가 발생했습니다. 오류가 발생했습니다. 그러나 Python 3.3에서는 중요한 변경 사항이 도입되었습니다.
다음 코드를 고려하세요.
<code class="python">def f(): return 3 yield 2</code>
이 코드에서는 return 문이 항복 문 앞에 나타납니다. 새로운 동작에 따르면 "생성기에서
생성기 객체에서 next 함수가 호출되면 값이 StopIteration 예외가 발생합니다. 3은 3을 반환하는 것과 동일합니다. 그러나 이 값은 생성기가 종료되었기 때문에 직접 검색할 수 없습니다. 대신 예외 객체의 값 속성으로 값에 액세스할 수 있습니다.
<code class="python">x = f() try: x.__next__() except StopIteration as e: print(e.value) # Outputs 3</code>
게다가 생성기가 Yield from 구문과 함께 사용되면 반환 값으로 작동합니다.
<code class="python">def g(): x = yield from f() print(x) for _ in g(): pass</code>
이 경우 출력은 1(f의 반환값)이지만 제너레이터가 종료되었기 때문에 2는 출력되지 않습니다.
위 내용은 Python 3.3 대체에서 내부 생성기를 반환하면 StopIteration 예외가 발생할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!