Python 3.3 대체에서 내부 생성기를 반환하면 StopIteration 예외가 발생할 수 있나요?

Patricia Arquette
풀어 주다: 2024-10-24 16:56:02
원래의
451명이 탐색했습니다.

Can Returning Inside Generators in Python 3.3 Substitute Raise StopIteration Exceptions?

생성기 내부 반환: Python 3.3 혁신

이전 Python 버전에서는 동일한 함수 정의 내에서 return과 Yield를 모두 사용하는 결과가 발생했습니다. 오류가 발생했습니다. 그러나 Python 3.3에서는 중요한 변경 사항이 도입되었습니다.

다음 코드를 고려하세요.

<code class="python">def f():
    return 3
    yield 2</code>
로그인 후 복사

이 코드에서는 return 문이 항복 문 앞에 나타납니다. 새로운 동작에 따르면 "생성기에서 을 반환하는 것은 이제 StopIteration()을 올리는 것과 동일합니다." 따라서 위 코드의 return 문은 본질적으로 값이 3인 StopIteration 예외를 발생시킵니다.

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

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!