Generator
generator 는 iterator 를 생성해주는 함수 (method) 다.
Iterator 는 클래스에 __iter__, __next__ 또는 __getitem__ 메서드를 구현해야 하지만, generator 는 함수 안에서 yield 라는 키워드를 사용해서 값을 지정해준다.
그래서 제너레이터는 이터레이터보다 훨씬 간단하게 작성할 수 있다.
예시
def number_generator(stop):
n = 0 # 숫자는 0부터 시작
while n < stop: # 현재 숫자가 반복을 끝낼 숫자보다 작을 때 반복
yield n # 현재 숫자를 바깥으로 전달
n += 1 # 현재 숫자를 증가시킴
for i in number_generator(3):
print(i)Generator 표현식
(식 for 변수 in 반복가능한객체)- 리스트 표현식을 사용할 때
[ ](대괄호) 를 사용했다. - 같은 리스트 표현식을
( )(괄호) 로 묶으면 제너레이터 표현식이 된다. - 리스트 표현식은 처음부터 리스트의 요소를 만들어내지만,
Generator 표현식은 필요할 때 요소를 만들어내므로 메모리를 절약할 수 있다.
>>> [i for i in range(50) if i % 2 == 0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22,
24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48]
>>> (i for i in range(50) if i % 2 == 0)
<generator object <genexpr> at 0x024F02A0>