Python에서 생성기를 사용하는 방법(yield 문)
Python에서 생성기를 작성하는 방법을 알아보세요. Yield 키워드, 지연 평가, 메모리 최적화를 이해하고 생성기를 목록 구조와 비교합니다.
개요
대규모 데이터세트, 로그 파일 또는 무한한 데이터 스트림으로 작업할 때 모든 요소를 동시에 메모리에 로드하면(예: 큰 목록 반환) 시스템 RAM이 쉽게 소모되고 애플리케이션이 중단될 수 있습니다. Python은 훌륭하고 메모리 효율적인 솔루션인 생성기를 제공합니다.
생성기는 게으른 반복자를 반환하는 특수한 유형의 함수입니다. 모든 값을 한 번에 계산하여 반환하는 대신 생성기는 요청에 따라 값을 하나씩 생성합니다. 주요 차이점은 `yield` 문입니다. 생성기 함수가 'yield'를 호출하면 실행 상태(변수, 명령어 포인터)를 일시 중지하고 산출된 값을 반환합니다. 다음 값이 요청되면 함수는 일시 중지된 위치에서 정확하게 다시 시작됩니다.
생성기 계산은 느리게 실행되므로 데이터 세트 크기에 관계없이 메모리를 거의 사용하지 않습니다. Python은 괄호 구문 `(x for x in data)`을 사용하여 전체 함수를 선언하지 않고도 경량 인라인 생성기를 생성하는 생성기 표현식도 지원합니다.
코드 및 실행 출력
이 스크립트는 생성기 함수와 생성기 문 및 생성기 표현식을 사용하여 시퀀스를 생성하는 방법을 보여줍니다.
# 1. Generator function using yield
def count_up_to(limit):
count = 1
while count <= limit:
yield count
count += 1
# Instantiating the generator
counter = count_up_to(3)
print("Memory safe generator instantiated.")
# Fetching values manually
print("Next 1:", next(counter))
print("Next 2:", next(counter))
print("Next 3:", next(counter))
# 2. Iterating with a for loop (automatically handles StopIteration)
print("\n--- Looping over generator ---")
for num in count_up_to(4):
print("Num:", num)
# 3. Generator expression (Shorthand syntax)
squares_gen = (x**2 for x in range(1, 4))
print("\nGenerator expression elements:")
print(list(squares_gen)) # Cast to list to print all elementsMemory safe generator instantiated.
Next 1: 1
Next 2: 2
Next 3: 3
--- Looping over generator ---
Num: 1
Num: 2
Num: 3
Num: 4
Generator expression elements:
[1, 4, 9]단계별 구현
- 표준 def 키워드를 사용하여 함수를 정의합니다.
- 값을 반복자 스트림으로 다시 반환하려면 return 대신 Yield 키워드를 사용하세요.
- for 루프를 사용하여 생성기를 반복하거나 내장된 next(gen) 함수를 호출하여 값을 추출합니다.
- 간단한 인라인 지연 변환에는 생성기 표현식(괄호 사용)을 사용하세요.
자주 묻는 질문
목록에 비해 생성기의 주요 장점은 무엇입니까?
메모리 효율성. 목록은 모든 요소를 RAM에 동시에 저장하는 반면 생성기는 필요에 따라 항목을 하나씩 생성하므로 시스템의 전체 메모리보다 큰 데이터 세트를 처리할 수 있습니다.
생성기의 항목이 부족하면 어떻게 되나요?
Python은 StopIteration 예외를 발생시킵니다. for 루프는 자동으로 이 예외를 포착하여 루프를 정상적으로 종료하지만 소진된 생성기에서 next()를 수동으로 호출하면 예외가 발생합니다.
관련 주제
권장 Python 리소스
관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.
Python 생성기
Python 생성기와 Yield 문을 사용하여 최소한의 메모리 공간으로 대규모 데이터세트를 처리하는 방법을 알아보세요. 마스터 생성기 표현식.
Python 문자열 메서드 치트 시트
Python 문자열 조작에 대한 완전한 참조 가이드입니다. 문자열 속성의 서식 지정, 검색, 분할, 바꾸기 및 확인을 마스터합니다.
Python 대 JavaScript: 어떤 프로그래밍 언어가 가장 좋나요?
Python과 JavaScript를 포괄적으로 비교합니다. 구문 차이점, 성능, 사용 사례(백엔드와 프런트엔드) 및 코딩 예제를 살펴보세요.