
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 |
---|
댓글