Python 생성기의 "send" 유틸리티 이해
Python 생성기의 "yield" 개념은 널리 알려져 있지만 목적은 "보내기" 기능은 여전히 모호합니다. 명확히 말하면, "보내기" 기능을 사용하면 최근에 값을 생성한 생성기로 값을 전송할 수 있습니다.
다음과 같은 간단한 예를 고려하세요.
<code class="python">def double_inputs(): while True: x = yield yield x * 2</code>
생성기 인스턴스 생성 시 (gen), next(gen) 문을 실행하면 생성기가 초기화되고 첫 번째 "yield" 발생 시 실행이 일시 중지됩니다. 이어서 gen.send(10)를 호출하면 "yield" 변수에 값 10이 주입됩니다. 그런 다음 생성기는 곱셈 연산의 결과를 나타내는 값 20을 반환합니다.
"send"를 사용하여 생성기에 값을 전달하는 이 기능은 주로 생성기에서 값을 전달하는 "yield"와 구별됩니다.
"send"의 중요한 응용 프로그램은 Twisted의 "@defer.inlineCallbacks" 데코레이터에 있습니다. 이를 통해 다음과 같은 기능을 원활하게 실행할 수 있습니다.
<code class="python">@defer.inlineCallbacks def doStuff(): result = yield takesTwoSeconds() nextResult = yield takesTenSeconds(result * 10) defer.returnValue(nextResult / 10)</code>
이 예에서 "takesTwoSeconds"는 처음에 "Deferred" 개체를 반환합니다. Twisted는 이 계산을 백그라운드 스레드에 할당하고 완료 시 "send"를 통해 대기 중인 doStuff 생성기에 결과를 주입합니다. 이 메커니즘은 코드 구조를 단순화하여 비동기 작업을 처리할 때 보다 선형적이고 이해하기 쉬운 흐름을 허용합니다.
위 내용은 Python의 \"send\" 함수는 생성기에서 무엇을 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!