본문 바로가기

Python

Python 제너레이터(Generator)

728x90

제너레이터(Generator)란?

제너레이터란, 반복 가능한 객체(iterable)를 만드는데 사용되는 함수다.

제너레이터를 만들기 위해서는 yield 키워드를 사용한다.

제너레이터를 만드는 방법에는 크게 2가지가 있다.

  • 제너레이터 함수를 이용한 방법
  • 제너레이터 표현식을 이용한 방법

제너레이터 함수

def generator():
    print("hello, 1")
    yield 1

    print("hello, 2")
    yield 2

    print("hello,  3")
    yield 3

 

제너레이터를 정의하기 위해서는 위와 같이 함수에 yield 키워드를 사용하면 된다.

yield 키워드 다음에 오는 값을 반환한다.

gen = generator()
print(gen)

>> <generator object generator at 0x000001F7A0A09A10>

 

제너레이터 객체를 만들려면 함수를 호출하면 된다.

gen 변수에 제너레이터 객체가 담긴 것을 확인할 수 있다.

print(next(gen)) # 1 반환
print(next(gen)) # 2 반환
print(next(gen)) # 3 반환
print(next(gen)) # StopIteration Exception

>> hello, 1
>> 1
>> hello, 2
>> 2
>> hello, 3
>> 3
>> StopIteration

 

next() 함수를 이용하여 제너레이터 함수의 yield 값을 순회할 수 있다.

next 함수마다 마지막으로 실행된 yield문 다음줄부터 실행된다.

더 이상 순회할 yield 문이 없다면 StopIteration 이라는 예외(Exception)이 발생한다.

 

def even():
    num = 0
    while True:
        yield num
        n += 2
    pass

for num in even():
	print(num, end=" ")

 

위 코드는 짝수를 무한히 반환하는 제너레이터 함수다.


제너레이터 표현식

표현식을 이용해서도 제너레이터를 만들 수 있다.

even_numbers = (num for num in range(2,101,2) if num % 2 == 0)

 

2부터 100까지 짝수를 생성하는 제너레이터