[Python] 제너레이터(Generator) 정리

2020. 9. 28. 18:45Programming Language/Python

반응형

제너레이터(Generator) 란?

제너레이터(Generator)는 아이터레이터(iterator)를 생성해 주는 함수이다.

아이터레이터(iterator)는 next 함수를 이용해 데이터에 순차적으로 접근이 가능한 Object 이다.

일반함수와 제너레이터(Generator) 함수의 차이점은 yield 사용함에 있다.

일반함수는 사용이 종료되면 결과값을 호출부로 반환 후 함수 자체를 종료시킨 후 메모리 상에서 클리어되지만, 제너레이터(Generator)함수는 yield를 기점으로 next() 를 통해 반환 값을 호출한 쪽으로 전달하고 그 상태로 유지된다. 따라서 메모리에 그대로 유지되는 것이다. 


■ 예시

  • for 문이 실행되며, 먼저 generator 함수가 호출된다.
  • generator 함수는 일반 함수와 동일한 절차로 실행된다. 
  • 실행 중 while 문 안에서 yield 를 만나게 된다. 그러면 return 과 비슷하게 함수를 호출했던 구문으로 반환하게 된다. 여기서는 첫번재 i 값인 0 을 반환하게 된다. 하지만 반환 하였다고 generator 함수가 종료되는 것이 아니라 그대로 유지한 상태이다.
  • x 값에는 yield 에서 전달 된 0 값이 저장된 후 print 된다. 그 후 for 문에 의해 다시 generator 함수가 호출된다. 
  • 이때는 generator 함수가 처음부터 시작되는게 아니라 yield 이후 구문부터 시작되게 된다. 따라서 i += 1 구문이 실행되고 i 값은 1로 증가한다.
  • 아직 while 문 내부이기 때문에 yield 구문을 만나 i 값인 1이 전달 된다.
  • x 값은 1을 전달 받고 print 된다. (이후 반복)
def generator(n):
    i = 0
    while i < n:
        yield i
        i += 1

for x in generator(5):
    print(x)
    
# ※ 출력 결과
# 0
# 1
# 2
# 3
# 4
반응형