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까지 짝수를 생성하는 제너레이터
'Python' 카테고리의 다른 글
Python 클로져 함수(Closure Function) (0) | 2024.03.29 |
---|---|
Python 패킹(packing) 언패킹(unpacking) 총정리 (0) | 2024.03.29 |
Python 연결 리스트(Linked List) (0) | 2024.03.29 |
Python 싱글턴 패턴(Singleton Pattern), 반복자 패턴(Iterator Pattern), 데코레이터 패턴(Decorator Pattern) (0) | 2024.03.29 |
Python 스페셜 메서드 len, getitem, iter, str, repr, new (0) | 2024.03.28 |