Python 3.3의 "yield from"의 힘
Python 3.3은 "yield from" 구문을 도입하여 프로그래밍에 혁신적인 접근 방식을 가져왔습니다. 생성기와 코루틴을 사용합니다. 일반 생성기와 유사하지만, Yield from은 호출자와 하위 생성기 사이에 직접 연결을 설정하여 원활한 양방향 통신이 가능합니다.
1. 생성기에서 데이터 읽기
가장 간단한 사용 사례는 생성기에서 데이터를 읽는 것입니다. Yield from을 사용하면 일반 루프와 유사한 단순화된 구문으로 생성기로부터 값을 받을 수 있습니다.
예를 들어 데이터 읽기를 시뮬레이션하는 생성기를 생각해 보세요.
<code class="python">def reader(): for i in range(4): yield '<< %s' % i
사용 다음과 같이 데이터를 반복할 수 있습니다.
<code class="python">def reader_wrapper(g): yield from g wrap = reader_wrapper(reader()) for i in wrap: print(i)
2. 코루틴으로 데이터 보내기
코루틴으로 데이터를 보낼 때 빛나는 결과를 얻습니다. Yield from을 사용하면 래퍼로 전송된 데이터가 코루틴으로 투명하게 전달됩니다.
특정 대상에 데이터를 쓰는 코루틴을 고려해보세요.
<code class="python">def writer(): while True: w = (yield) print('>> ', w)</code>
Yield를 사용하여 이 작성자에게 데이터를 보내려면 출처:
<code class="python">def writer_wrapper(coro): coro.send(None) while True: try: x = (yield) coro.send(x) except StopIteration: pass w = writer() wrap = writer_wrapper(w) wrap.send(None) for i in range(4): wrap.send(i)</code>
3. 예외 처리
예외를 원활하게 처리합니다. 하위 생성기에서 발생한 예외는 호출자에게 전파됩니다. 추가적으로, 래퍼로 전송된 예외가 하위 생성기에 던져질 수 있습니다.
예를 들어, 작성기 코루틴에서:
<code class="python">def writer(): while True: try: w = (yield) except SpamException: print('***') else: print('>> ', w)</code>
yield from을 사용하면 다음과 같이 예외를 처리할 수 있습니다. :
<code class="python">def writer_wrapper(coro): yield from coro</code>
4. 양방향 통신의 힘
yield from의 핵심 측면은 양방향 연결을 구축한다는 것입니다. 이는 코루틴에 데이터를 전송할 수 있을 뿐만 아니라 예외를 전파하고 하위 생성기의 최종 값을 반환합니다.
결론
yield from은 강력한 도구입니다. 이는 Python의 생성기와 코루틴에 혁명을 일으켰습니다. 양방향 통신을 단순화하고 예외를 원활하게 처리하며 우아한 솔루션을 허용합니다. 사용 사례는 논의된 예제를 훨씬 뛰어넘어 Python의 많은 고급 프로그래밍 작업의 필수 구성 요소가 됩니다.
위 내용은 양방향 통신의 힘 잠금 해제: Python 3.3에 'yield from'이 가져오는 것은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!