"send" 함수와 함께 Python 생성기 사용
Python의 생성기는 다음 작업을 하지 않고도 일련의 값을 느리게 반복하는 방법을 제공합니다. 전체 시퀀스를 메모리에 저장합니다. Yield 키워드는 값을 생성하고 생성기 함수의 실행을 일시 중지하는 데 사용됩니다. 하지만 제너레이터 사용에 중요한 역할을 하는 send라는 또 다른 메서드가 있습니다.
"send" 함수의 목적
send() 함수는 Python 생성기를 사용하면 생성기 함수의 실행을 재개하고 해당 함수에 값을 "전송"할 수 있습니다. 이 값은 현재 항복 표현식의 결과가 됩니다. 생성기가 생성한 다음 값을 반환하는 Yield와 달리 send()는 생성기로 전송된 값을 반환합니다.
"send" 함수 이해
명확히 하기 위해 일련의 두 배 숫자를 생성하는 생성기 함수를 상상해 보십시오. Yield를 사용하면 다음 두 배의 숫자를 검색할 수 있습니다.
<code class="python">def double_generator(): while True: x = yield yield x * 2</code>
이제 이 생성기에 값 10을 전송한다고 가정해 보겠습니다. send()를 사용하면 다음을 수행할 수 있습니다.
<code class="python">generator = double_generator() next(generator) # Initiate the generator result = generator.send(10) # Send 10 into the generator print(result) # Output: 20</code>
이 예에서 send() 호출은 산출된 지점(x = 산출)에서 생성기 함수를 재개하고 전송된 값(10)을 할당합니다. )를 변수 x에 대입하고, 다음 Yield 문(yield x * 2)의 결과인 20을 반환합니다.
실습에서의 "send" 예시
send() 사용은 단순한 배가 생성기에만 국한되지 않습니다. 이는 생성기 함수에 값을 전달하고 해당 실행을 동적으로 제어하려는 경우 특히 유용할 수 있습니다. 예를 들어, send()에 의존하는 다음 코드를 고려해보세요.
<code class="python">@defer.inlineCallbacks def do_something(): result1 = yield long_running_process(10) result2 = yield long_running_process(result1 * 2) defer.returnValue(result2 / 10)</code>
이 코드는 Twisted의 @defer.inlineCallbacks 데코레이터를 사용합니다. 이를 통해 비동기 코드를 동기 코드처럼 작성할 수 있습니다. 여기서 long_running_process()는 완료하는 데 시간이 좀 걸리고 Deferred를 반환하는 함수입니다.
do_something()이 실행되면서 생성기 함수에 값을 보냅니다. 예를 들어 초기 양보 후에는 long_running_process(10)에서 반환한 Deferred가 해결될 때까지 실행이 일시 중지됩니다. 그런 다음 Deferred의 결과는 생성기로 다시 전송되어 result1 변수에 할당됩니다.
이 동적 흐름을 사용하면 보다 복잡한 비동기 코드를 보다 간단한 방식으로 작성할 수 있으므로 Python에서 비동기 프로세스로 작업합니다.
위 내용은 \'send\' 함수는 Python 생성기와 어떻게 작동하며 실제 응용 프로그램은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!