파이썬 생성기에서 함수 보내기
이 튜토리얼에서는 Python에서 생성기의 send()
기능을 사용하는 방법을 설명합니다.
생성기 개요
반복자처럼 작동하고 Python 생성기 함수를 통해 for
루프에서 사용할 수 있는 함수를 만들 수 있습니다. 예를 들어, 첫 번째 n
이 아닌 정수를 나타내는 first_n()
이라는 메서드의 다양한 구현을 비교할 것입니다.
n
은 매우 큰 숫자이므로 이러한 비교를 위해 각 정수에 많은 저장 공간이 필요하다고 가정합니다(예: 각각 10
메가바이트).
그것들은 거대한 정수가 아닌 한 실생활에서 많은 공간을 차지하지 않는다는 것을 기억하십시오. 예를 들어 128바이트를 사용하여 309자리 정수를 나타낼 수 있습니다.
다음 예를 살펴보겠습니다.
def first_n(n):
num, nums = 0, []
while num < n:
nums.append(num)
num += 1
return nums
sum_of_first_n = sum(first_n(1000000))
위의 코드는 첫 번째 n
숫자까지 값을 합산하는 합산 함수를 만듭니다. 유일한 문제는 그것이 많은 메모리를 구축한다는 것입니다.
메모리에 최대 10
메가바이트 정수를 유지할 여유가 없다는 것을 기억하십시오. 이를 해결하기 위해 Python에서 생성기를 사용합니다.
생성기는 반복자를 만드는 데 도움이 됩니다. 다음 코드 블록을 통해 이해할 수 있습니다.
def first_n(n):
num, nums = 0, []
while num < n:
yield num
num += 1
return nums
print(sum(first_n(1000000)))
출력:
499999500000
위의 코드 펜스는 반복자 실행의 메모리 사용 사례 기능을 사용합니다.
Python 생성기에서 send()
사용
제너레이터-이터레이터에 대한 send()
메서드는 제너레이터에 유용합니다. Python 버전 2.5부터 PEP 342
에 지정된 이 함수에 액세스할 수 있습니다.
생성기는 send()
메서드로 다시 시작되며, 이 메서드는 후속 yield를 시작하는 데 사용할 값도 보냅니다. 마지막으로 프로세스(메서드)는 생성기가 생성한 새 값을 반환합니다.
send()
메서드는 값이 없을 때 next()
를 사용하는 것과 비슷합니다. None
은 이 절차에 대해 가능한 또 다른 값입니다. 두 경우 모두 제너레이터는 작업을 첫 번째 return
문으로 전달합니다.
다음 코드에서 send()
함수를 살펴보겠습니다.
def numberGenerator(n):
number = yield
while number < n:
yield number
number += 1
g = numberGenerator(10)
next(g)
print(g.send(5))
출력:
5
위의 코드 블록에서 볼 수 있듯이 마지막 줄에서 g
변수 내에서 값 5
를 전송하여 생성기가 마지막 입력을 5
로 간주하도록 합니다.
send()
함수는 마지막 입력으로 사용할 수 있는 생성기 변수에 마지막 허용 값을 보냅니다. 따라서 우리는 생성기의 작동 방식과 생성기의 send()
기능의 중요성을 이해했습니다.
관련 문장 - Python Function
- Python에서 함수 종료
- Python의 선택적 인수
- Python Functools 부분 함수
- Python 함수 매개변수 유형
- Python에서 단계 함수 맞추기
- Python의 내장 ID 함수