>  기사  >  백엔드 개발  >  Python 3.3 생성기에서 수익률과 수익률이 어떻게 함께 작동합니까?

Python 3.3 생성기에서 수익률과 수익률이 어떻게 함께 작동합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-25 04:39:02326검색

How Do Return and Yield Work Together in Python 3.3 Generators?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.