Python 생성기에서 Return과 Yield를 함께 사용
Python 2에서 생성기 함수 내부에 return 문을 사용하면 Yield도 사용됩니다. 오류. 그러나 Python 3.3에서는 미묘한 변화가 발생했습니다.
코드 데모
다음 Python 3.3 코드를 고려하세요.
<code class="python">def f(): return 3 yield 2 x = f() print(x.__next__())</code>
설명
이 코드에서 f 함수에는 return 문과 항복 문이 모두 포함되어 있습니다. 함수가 호출되면 return 문이 먼저 실행되고 값 3이 반환됩니다. 결과적으로, 항복 문은 실행되지 않습니다.
생성기 x가 next 메서드를 호출하여 반복되면 값 3으로 StopIteration 예외가 발생합니다. 이는 생성기의 반복자가 소진되고 return 문에서 반환된 값은 예외의 값 속성으로 사용할 수 있습니다.
Python 3.3의 새로운 메커니즘
PEP 380에 따르면 , 이 동작은 Python 3.3에 도입된 새로운 기능입니다. 다음과 같습니다.
<code class="python">def f(): yield 3 raise StopIteration</code>
Yield from
다음 예에서는 이 동작이 Yield from 구문을 사용하여 위임된 생성기에 어떤 영향을 미치는지 보여줍니다.
<code class="python">def f(): return 1 yield 2 def g(): x = yield from f() print(x) # g is still a generator so we need to iterate to run it: for _ in g(): pass</code>
이 경우 Yield from 문은 생성자 f에 위임됩니다. f는 값을 반환하지만 더 이상 항복 문이 없으므로 값 1이 인쇄됩니다. 그러나 f의 Yield 2 문은 실행되지 않습니다.
위 내용은 Python 3.3 생성기에서 수익률과 수익률이 어떻게 함께 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!