728x90
제너레이터(generator)는 반복 가능한(iterable) 값을 하나씩 생성해주는 함수입니다. yield
키워드를 사용하여 값을 반환하며, 매 호출 시 이전 상태를 유지하기 때문에 메모리 효율성이 뛰어납니다. 특히 대용량 데이터 처리나 무한 시퀀스를 다룰 때 유리합니다.
● 제너레이터 함수란?
yield
키워드를 포함하는 함수는 제너레이터 함수로 간주되며, 실행 시 함수 내부 코드가 즉시 실행되지 않고 generator object
를 반환합니다.
def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1
for num in count_up_to(5):
print(num)
이 예제는 1부터 n까지의 숫자를 하나씩 생성하며, yield
에 도달할 때마다 현재 값이 반환되고 함수 상태가 보존됩니다.
● yield vs return
return
은 함수 실행을 종료하고 단 한 번의 값을 반환yield
는 함수 실행을 일시 중지하고, 여러 번 값을 생성- yield는 상태를 기억하므로 루프처럼 동작함
● 제너레이터 표현식
리스트 컴프리헨션과 유사하게 제너레이터도 컴프리헨션 형태로 정의할 수 있습니다. 이 경우 소괄호 ()
를 사용합니다.
squares = (x**2 for x in range(5))
for s in squares:
print(s)
이 방식은 리스트보다 메모리를 덜 사용하므로 반복 처리에 효율적입니다.
● next()로 값 추출하기
제너레이터 객체는 next()
함수를 통해 직접 값을 꺼낼 수 있으며, 더 이상 값이 없으면 StopIteration
예외를 발생시킵니다.
gen = count_up_to(3)
print(next(gen)) # 1
print(next(gen)) # 2
● 마무리
제너레이터는 반복 처리에서 성능을 높이고 메모리를 아끼는 데 매우 유용한 도구입니다. 특히 대용량 로그 분석, 스트리밍 데이터 처리 등에서 필수적인 기능이므로 꼭 익혀두시기 바랍니다.
728x90
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter13. itertools 모듈 활용법 (0) | 2025.05.18 |
---|---|
[파이썬][중급] Chapter12. 이터레이터와 커스텀 반복자 만들기 (0) | 2025.05.18 |
[파이썬][중급] Chapter10. 데코레이터 함수의 작성과 활용 (0) | 2025.05.18 |
[파이썬][중급] Chapter09. 일급 객체와 클로저 (0) | 2025.05.18 |
[파이썬][중급] Chapter08. contextlib와 with문 커스터마이징 (0) | 2025.05.18 |