Python 이터레이터, 제너레이터
이터레이터(iterator)
반복 가능한 객체를 말합니다.
좀 더 직관적으로 말하면 객체에 .next() 가 사용가능하면 이터레이터가 맞습니다.
EX) list, tuple, range
test = [1,2,3]
iter_test = iter(test)
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
위 코드의 경우 iter 메소드를 사용하여 이터레이터를 사용할 수 있도록 정의하고난 후 next 메소드를 하여 요소를 하나씩 출력 합니다.
제너레이터(generator)
이터레이터를 만들어주는것을 말합니다 == 반복 가능한 객체를 만들어줍니다.
제너레이터는 yield 를 사용하게 되는데,
yield : function에서 return과 동일한 역할을 수행한다.
이터레이터와 제너레이터의 차이
-
yield 의 사용여부
-
이터레이터는 모든 동작을 완료후 결과를 한번에 메모리에 적재
-
제너레이터는 각각의 yield 에서 한번 실행 시킨후 대기 상태에 들어가 결과를 반환, 이후 다시 yield 를 만날 경우 대기상태에 들어가 결과를 반환
위의 대기 상태 후 반환을 자세히 설명하면
yield가 호출될때마다 함수가 잠시 대기 상태에 들어가고,
결과값을 출력 후 다시 함수가 실행 상태로 되돌아 갑니다.
이렇게 yield를 만날때마다 함수는 잠시 대기 상태에 들어가고 바깥에 값을 전달하며 실행 순서를 양보 합니다.
Reference
https://nirsa.tistory.com/118
https://hackersstudy.tistory.com/9