본문 바로가기
Python Basic

제너레이터(generator)

by fiasco 2022. 11. 23.

제너레이터는 이터레이터를 생성해주는 함수입니다.

이터레이터는 클래스에 __iter__, __next__ 또는 __getitem__ 메서드를 구현해야 하지만 제너레이터는 함수 안에서 yield라는 키워드만 사용하면 끝입니다. 제너레이터는 발생자라고 부르기도 합니다. 

# yield 값
def number_generator():
    yield 0
    yield 1
    yield 2

result = number_generator()
for i in result:
    print(i)

 

yield에서 함수 호출하기

def upper_generator(x):
    for i in x:
        yield i.upper()  # 함수의 반환값을 바깥으로 전달


fruits = ['apple', 'pear', 'grape', 'pineapple', 'orange']
for i in upper_generator(fruits):
    print(i)

 

yield from를 이용한 제너레이터 생성

yield from 반복가능한객체
yield from 이터레이터
yield from 제너레이터객체

 

def number_generator(stop):
    n = 0
    while n < stop:
        yield n
        n += 1
 
def three_generator():
    yield from number_generator(3)    # 숫자를 세 번 바깥으로 전달
 
for i in three_generator():
    print(i)

 

제너레이터 표현식을 이용한 생성

( )(괄호)로 묶으면 제너레이터 표현식이 됩니다.

리스트 표현식은 처음부터 리스트의 요소를 만들어내지만 제너레이터 표현식은 필요할 때 요소를 만들어내므로 메모리를 절약할 수 있습니다.

(식 for 변수 in 반복가능한객체)

result = (i for i in range(50) if i % 2 == 0)
for i in result:
    print(i,end=' ')

'Python Basic' 카테고리의 다른 글

이터레이터(iterator)  (0) 2022.11.23
Exception  (0) 2022.11.23
decorator 사용법  (0) 2022.11.23
closure 사용법  (0) 2022.11.23
Programming productivity tools  (0) 2022.11.08