my_generator = (x for x in range(1,4))
for n in my_generator:
print(n)
여기서 print(type(my_generator))을 해보면
<class 'generator'>
이런식으로 제너레이터가 나오게 된다.
반복자와 동일한 일을 하는 것처럼 보이지만 여기에서 생성된 1,2,3을 미리 메모리에 만들어 두는 것이 아니라 for문에서 필요로 할 때마다 my_generator로 부터 받아오면 메모리에서 보관하지 않는다는 점이다.
( = lazy evaluation 계산 결과 값이 필요할 때까지 계산을 늦추는 효과가 있음 )
def numbers(): # 2 numbers 함수 선언 for num in range(1, 11): # 3 1부터 10까지 for문 실행 if num % 2 == 1: # 4 만약 num이 홀수이면 yield num # 5 yield 키워드를 만나고 값을 반환 for i in numbers(): # 1 for문을 실행하기 위해 numbers() 제너레이터 호출 print(i, end = " ") # 6 yield 키워드에서 만난 값을 반환
결과값: 1 3 5 7 9
제너레이터 표현식은 이터레이터를 반환한다.
제너레이터 함수를 좀 더 쉽게 사용할 수 있도록 해준다.
리스트 컴프리헨션과 구성이 비슷하지만 대괄호가 아닌 소괄호 ()
를 사용한다.
(표현식 for 원소 in 반복 가능한 객체) (표현식 for 원소 in 반복 가능한 객체 if 조건문)