>  기사  >  백엔드 개발  >  Python 3.3에서 반환은 생성기 동작에 어떤 영향을 줍니까?

Python 3.3에서 반환은 생성기 동작에 어떤 영향을 줍니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-24 17:16:02675검색

How does Return Affect Generator Behavior in Python 3.3?

Yield가 포함된 내부 생성기 반환

Python 3.3에서는 생성기 함수 내에서 Yield와 함께 반환을 사용하는 것과 관련하여 중요한 변경 사항이 도입되었습니다. 이러한 코드가 오류를 발생시키는 Python 2와 달리 Python 3.3에서는 이를 허용합니다. 그러나 동작은 예상한 것과 다릅니다.

다음 Python 3.3 코드를 고려하세요.

<code class="python">def f():
  return 3
  yield 2
  
x = f()
print(x.__next__())</code>

이 코드를 실행하면 StopIteration 예외가 발생하는 것을 볼 수 있습니다. 3. 이 예외에는 두 가지 주요 측면이 있습니다.

  • StopIteration이 발생함: 생성기 함수 내부의 return 문은 이제 StopIteration()을 올리는 것과 동일합니다.
  • 예외를 통해 액세스 가능한 값: 반환된 값(이 경우 3)은 예외 객체의 value 속성을 통해 액세스할 수 있습니다.

따라서 생성기가 함수에는 return과 Yield가 모두 포함되어 있으며 이는 지정된 반환 값으로 StopIteration 예외를 발생시키는 것과 같습니다. 이는 생성기가 종료되고 반환된 값은 예외의 값 속성을 통해 사용할 수 있음을 의미합니다.

즉, 생성기 함수의 반환은 이전에는 오류였지만 이제는 특정 목적을 갖습니다. 생성기를 종료하고 예외 처리 메커니즘을 통해 값을 반환합니다.

이 동작은 Python 3.3의 새로운 Yield from 구문을 사용하는 생성기 위임에 영향을 미칩니다. 예:

<code class="python">def f():
    return 1
    yield 2

def g():
    x = yield from f()
    print(x)

# Iterate over generator to run it
for _ in g():
    pass</code>

이 코드에서 생성기 f는 1을 반환한 다음 반환된 값을 인쇄하는 생성기 g에 위임합니다. 그러나 1만 인쇄되어 표시되며 이는 f의 항복 문이 값 2를 생성하기 전에 항복 문이 위임을 중지함을 나타냅니다.

위 내용은 Python 3.3에서 반환은 생성기 동작에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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