python/문법

제너레이터(Generator)

jwjwvison 2021. 8. 15. 12:16

제너레이터는 루프의 반복 동작을 제어할 수 있는 루틴 형태를 말한다. 예를 들어 임의의 조건으로 숫자 1억 개를 만들어내 계산하는 프로그램을 작성한다고 가정해보자. 이 경우 제너레이터가 없다면 메모리 어딘가에 만들어낸 숫자 1억 개를 보관하고 있어야 한다. 그러나 제너레이터를 이용하면 단순히 제너레이터만 생성해두고 필요할 때 언제든 숫자를 만들어낼 수 있다.

 

 이때 yied 구문을 사용하면 제너레이터를 리턴할 수 있다. 기존의 함수는 return 구문을 맞닥뜨리면 값을 리턴하고 모든 함수의 동작을 종료한다. 그러나 yield는 제너레이터가 여기까지 실행 중이던 값을 내보낸다는 의미로, 중간값을 리턴한 다음 함수는 종료되지 않고 계속해서 맨 끝에 도달할 때까지 실행된다. 물론 다음 코드의 경우처럼 while True 구문은 종료 조건이 없으므로 계속해서 값을 내보낼 수 있다.

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

이 경우 함수의 리턴 값은 다음과 같이 제너레이터가 된다.

 

만약 다음 값을 생성하려면 next()로 추출하면 된다. 예를 들어 100개의 값을 생성하고 싶다면 다음과 같이 100번 동안 next()를 수행하면 된다.

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

 

 아울러 제너레이터는 다음과 같이 여러 타입의 값을 하나의 함수에서 생성하는 것도 가능하다.

def generator():
    yield 1
    yield 'string'
    yield True

g=generator()
print(next(g))
print(next(g))
print(next(g))

print(next(g))를 호출할 때 마다 1,'string',True가 출력된다.

'python > 문법' 카테고리의 다른 글

any() 와 all()함수  (0) 2022.05.17
enumerate  (0) 2021.08.15