본문 바로가기
CS/PROGRAMMING

[Python] Iterator, Generator

by 나른한 사람 2021. 11. 4.

https://nvie.com/posts/iterators-vs-generators/

Iterable

  • list, set, dict, tuple, str 등과 같이 말그대로 반복 가능한 객체
  • __iter__() 함수를 가지고 있음 (else, object is not iterable 에러 발생)
  • iter(Iterable)을 통해 Iterator 반환

Iterator

  • Iterable object를 하나씩 차례대로 꺼낼 수 있는 객체
  • __next__() 함수를 가지고 있음 (else, object is not iterator 에러 발생)
  • next(Iterator)를 통해 iterable object 내부의 값을 하나씩 불러옴
  • 모든 값을 순회한 후에 next() 사용시 StopIteration 예외 발생

Generator

  • Iterator의 특수한 형태, 하위 클래스
  • return 대신 yield 사용 -> yield 에서 값 발생 & 실행 중지, 다시 호출하면 yield 이후부터 실행
  • Custom Iterator를 간편하게 사용할 수 있음

Generator Expression

  • list comprehension과 비슷하지만 [ ] 대신 ( ) 사용
  • Lazy Evaluation -> 모든 데이터를 메모리에 올리지 않고 사용할 수 있음. 한꺼번에 처리하지 않고 스트리밍 처리가 필요할 때 사용 가능.
import time

def test(i):
    print("sleep 1s")
    time.sleep(1)
    return i

iterator = iter([test(i) for i in range(5)])
print('-')
print(next(iterator))
generator = (test(i) for i in range(5))
print('--')
print(next(generator))
'''
sleep 1s
sleep 1s
sleep 1s
sleep 1s
sleep 1s
-
--
sleep 1s
'''

'CS > PROGRAMMING' 카테고리의 다른 글

[Python] GIL, 파이썬 메모리 관리  (0) 2021.11.05

댓글