파이썬에서 yield 키워드가 무엇을 하는지 알아보자
yield
키워드의 기본 개념
yield
는 파이썬의 제너레이터(generator)를 만드는 데 사용되는 키워드입니다. 제너레이터는 이터레이터(iterator)의 한 형태로, 일반적인 함수와 다르게 데이터를 한 번에 모두 반환하지 않고 필요할 때마다 하나씩 값을 생성해 반환합니다.
제너레이터와 일반 함수의 차이
일반 함수는 호출되면 코드를 실행하고, 결과를 한 번에 반환한 뒤 종료됩니다. 그러나 제너레이터 함수는 yield
키워드를 만나면 해당 위치에서 실행을 멈추고, 호출한 쪽으로 값을 전달합니다. 그 후 다시 함수가 호출되면, 멈췄던 위치부터 계속 실행합니다.
yield
의 작동 방식
yield
키워드를 사용할 때는 함수를 호출하면 제너레이터 객체가 생성됩니다. 이 객체를 통해 next()
함수를 호출하면 yield
가 있는 곳까지 코드가 실행되고, 그 위치의 값을 반환합니다. 다시 next()
를 호출하면, 이전에 멈췄던 위치에서 계속하여 다음 yield
를 만날 때까지 실행합니다.
yield
를 사용하는 이유
yield
를 사용하면 큰 데이터 셋을 처리할 때 메모리를 효율적으로 사용할 수 있습니다. 예를 들어, 큰 파일을 한 줄씩 읽을 때나 네트워크 스트림을 처리할 때 유용합니다.
예제 코드
1
2
3
4
5
6
7
8
9
def number_generator(n):
for i in range(n):
yield i
gen = number_generator(3)
print(next(gen)) # 출력: 0
print(next(gen)) # 출력: 1
print(next(gen)) # 출력: 2
이 코드에서 number_generator
함수는 0부터 n-1까지의 숫자를 차례로 반환하는 제너레이터입니다.
주의할 점
제너레이터는 StopIteration
예외를 통해 더 이상 반환할 값이 없음을 알립니다. 따라서 반복문에서 사용할 경우, 이 예외를 처리해야 합니다.
요약
yield
키워드는 제너레이터 함수를 정의하는 데 사용되며, 이 함수를 통해 큰 데이터를 효율적으로 처리할 수 있습니다. 제너레이터는 값을 하나씩 차례대로 생성해 반환하며, 메모리 사용을 최소화하는 데 도움이 됩니다.