(파이썬 클린코드) 제너레이터(Generator)
파이썬에서 제너레이터(generator)는 이터레이터(iterator)와 유사하지만, 이터레이터보다 더 강력하고 효율적인 함수입니다. 제너레이터는 값을 반환할 때마다 함수의 상태를 기억하고 다음 값 반환에 사용합니다.
제너레이터 함수는 yield 키워드를 사용하여 값을 반환합니다. 예를 들어, 0부터 시작하여 지정된 범위까지 모든 짝수를 반환하는 제너레이터 함수를 작성해 보겠습니다.
def even_numbers(n):
for i in range(n):
if i % 2 == 0:
yield i
이 함수를 호출하면, 이터레이터 객체가 반환됩니다. 이 객체는 __next__() 메소드를 사용하여 값을 하나씩 가져올 수 있습니다.
evens = even_numbers(10)
print(next(evens)) # 0
print(next(evens)) # 2
print(next(evens)) # 4
또한, 제너레이터 함수를 for 루프에서 사용하여 간결하게 코드를 작성할 수 있습니다.
for even in even_numbers(10):
print(even)
이 코드는 0부터 10까지의 모든 짝수를 출력합니다.
제너레이터는 무한한 수열을 다룰 때 특히 유용합니다. 예를 들어, 무한한 피보나치 수열을 생성하는 제너레이터 함수를 작성할 수 있습니다.
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
이 함수를 호출하여 피보나치 수열의 처음 10개 항목을 가져올 수 있습니다.
fib = fibonacci()
for i in range(10):
print(next(fib))
이 코드는 다음과 같이 출력됩니다.