본문 바로가기
Study

[ Python ] 이터레이터(Iterator) vs 제너레이터 (Generator)

by 까다로운오리 2024. 3. 31.

 

 

이터레이터 (Iterator) ?

- 집합에서 값을 차례대로 꺼낼 수 있는 객체

- For 문을 순회할 수 있음

- iter()로 반복 가능한 객체로 변환한 후, next()로 다음 값을 뽑는다

- 한 번 반복하면 재사용 불가

 

a = [1, 2, 3]
iterator = iter(a)
next(iterator) # 1 출력
next(iterator) # 2 출력
next(iterator) # 3 출력
next(iterator) # StopIteration 에러 발생

 

 

제너레이터 (Generator)

- 이터레이터를 생성해주는 함수

- 순차적로 다른 값을 반환하길 원할 때

- yield()

 

def generator():
    yield 'a'
    yield 'b'
    yield 'c'

g = generator()
next(g) # a 출력
next(g) # b 출력
next(g) # c 출력
next(g) # StopIteration 에러 발생

 

 

그럼 어떨 때 사용해야 하나?

 

메모리 관점에서의 차이가 존재하는데, 이터레이터는 모든 과정을 거친 후 실행 결과를 한 번에 메모리에 적재시킴

제너레이터는 yield로 실행될 때 마다 대기상태에 들어가 밖에 값을 전달한 후 다시 함수로 들어와 그 다음 코드를 진행하는 방법