제너레이터(Generator)

제너레이터

루프의 반복(iteration) 동작을 제어할 수 있는 루틴 형태

예를 들어 임의의 조건으로 숫자 1억 개를 만들어내 계산하는 프로그램을 작성한다고 가정해보자.
이 경우 제너레이터가 없다면 메모리 어딘가에 만들어낸 숫자 1억 개를 보관하고 있어야 한다.
그러나 제러네이터를 이용하면, 단순히 제너레이터만 생성해두고 필요할 때 언제든 숫자를 >만들어낼 수 있다.
만약에 1억 개중 100개 정도만 쓰인다면 차이는 더욱 클 것이다.

yield 구문을 사용하면 제너레이터를 리턴할 수 있다.
기존의 함수는 return 구문을 만나면 값을 리턴하고 함수의 동작을 종료한다.
그러나 yield는 제너레이터가 여기까지 실행 중이던 값을 내보낸다는 의미로, 값을 리턴한 후 함수는 종료되지 않고 계속 실행된다.

def get_natural_number():
    n = 0
    while True:
        n += 1
        yield n

이 함수의 리턴 값은 제너레이터가 된다.
get_natural_number()
<generator object get_natural_number at 0x000002BFF6749200>

다음 값을 생성하려면 next()로 추출하면 된다.

g = get_natural_number()
for _ in range(0, 100):
    print(next(g))

1
2
3

98
99
100

나의 생각

제너레이터는 반복 과정에서 반복 값이 필요할 때 값을 출력할 수 있도록 하는 것 같다.
아직 정확히 모르겠다..