less than 1 minute read

이터레이터(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

Categories:

Updated: