파이썬 제너레이터와 yield 키워드 완전정복: 메모리 효율과 실전 활용법!
파이썬 제너레이터와 yield 키워드, 언제 어떻게 써야 할지 헷갈리셨나요? 이 글 하나로 yield의 개념부터 제너레이터 함수의 동작 원리, 실전 예제, 리스트 컴프리헨션과의 차이, 메모리 효율까지 완벽하게 정리해드립니다. yield는 대용량 데이터 처리, 무한 시퀀스 생성 등에서 파이썬 개발자라면 반드시 익혀야 할 핵심 키워드입니다.
많은 분들이 "yield와 return의 차이는?", "제너레이터는 언제 쓰는 게 좋을까?", "next, for문, send 등 다양한 활용법은?" 등 다양한 고민을 하시죠. 이 글에서 모든 궁금증을 해결하세요!
📋 목차
🔍제너레이터와 yield 기본 개념
제너레이터(Generator)는 yield 키워드를 사용해 이터레이터를 간단하게 생성하는 함수입니다. 일반 함수는 return으로 값을 한 번만 반환하고 끝나지만, 제너레이터 함수는 yield를 만날 때마다 값을 하나씩 반환하고, 실행을 일시 중단합니다.
다음에 다시 호출되면 중단된 지점부터 실행을 재개합니다.
- yield를 사용하면 함수가 제너레이터 객체를 반환
- next()나 for문으로 값을 하나씩 꺼낼 수 있음
- 메모리에 모든 값을 올리지 않고 필요할 때마다 생성(지연 평가, lazy evaluation)
한줄 요약: yield는 함수 실행을 일시 중단하고, 값을 하나씩 반환!
📝yield 동작 원리와 함수 구조
yield를 사용한 함수는 return 대신 yield로 값을 반환합니다. yield를 만나면 함수 실행이 멈추고, 값을 반환한 뒤 상태를 저장합니다. 다시 next()를 호출하면 이전 상태부터 실행을 재개합니다.
def my_gen(): yield 1 yield 2 yield 3
gen = my_gen()
print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3
더 이상 값이 없으면 StopIteration 예외 발생
for문으로도 제너레이터의 모든 값을 순회할 수 있습니다. 함수 내부 상태가 유지되므로 무한 시퀀스나 대용량 데이터 처리에 탁월합니다.
한줄 요약: yield는 실행 중단/재개, 함수 상태를 기억!
📊리스트 컴프리헨션 vs 제너레이터
구분 | 리스트 컴프리헨션 | 제너레이터 |
---|---|---|
메모리 사용 | 모든 값 한 번에 생성 | 필요할 때만 값 생성 |
사용 예시 | [x*x for x in range(1000000)] | (x*x for x in range(1000000)) |
무한 시퀀스 | 불가 | 가능 |
한줄 요약: 제너레이터는 대용량·무한 데이터에 최적!
🎯실전 예제와 활용 패턴
- 기본 제너레이터
def count_up_to(n): count = 1 while count <= n: yield count count += 1 for num in count_up_to(5): print(num) # 1 2 3 4 5
- 무한 시퀀스 생성
def infinite(): n = 0 while True: yield n n += 1 gen = infinite() for i in range(10): print(next(gen)) # 0 ~ 9
- 파일 한 줄씩 읽기
def read_lines(filename): with open(filename) as f: for line in f: yield line.strip() for line in read_lines('data.txt'): print(line)
- yield from 활용(3.3+)
def gen_numbers(): yield from range(5) for n in gen_numbers(): print(n) # 0 1 2 3 4
- yield는 실행 중단/재개, 함수 상태 유지
- next(), for문, yield from 등 다양한 활용
- 대용량·무한 데이터 처리에 메모리 효율 최강
한줄 요약: 실전에서 yield로 메모리와 효율 모두 잡기!
💡활용 꿀팁과 주의사항
- yield를 사용한 함수는 항상 제너레이터 객체 반환
- next()로 값을 꺼낼 때 더 이상 값이 없으면 StopIteration 예외 발생
- send()로 외부에서 값을 전달하고, 코루틴처럼 양방향 통신 가능
- yield from으로 다른 이터러블을 한 번에 yield 가능
- 제너레이터는 for문, 리스트 변환 등 다양한 방식으로 순회 가능
- yield=메모리 효율, 무한 시퀀스, 지연 평가
- next, send, yield from 등 다양한 활용법
- 대용량 데이터, 파일 처리, 스트림에 특히 유용
한줄 요약: yield는 파이썬 메모리 효율의 핵심!
- yield는 실행 중단/재개로 메모리 효율적 데이터 처리
- 제너레이터는 무한 시퀀스, 대용량 데이터에 최적
- next, for문, send, yield from 등 다양한 활용 가능
도움이 되셨다면 공감♥ 눌러주세요!
파이썬 제너레이터와 yield 키워드, 이제 완벽하게 이해하셨나요? 다음 글에서는 코루틴, 비동기 프로그래밍, 실전 데이터 파이프라인 등 더 깊이 있는 내용을 다룰 예정입니다. 궁금한 점이나 추가 질문은 댓글로 남겨주세요! 구독과 알림 설정도 잊지 마세요.
#파이썬yield #제너레이터 #yield키워드 #메모리효율 #지연평가 #파이썬기초 #for문 #next #yieldfrom #코딩학습 #파이썬2025
'IT silo' 카테고리의 다른 글
파이썬 주석 작성법과 규칙: 한 번에 끝내는 실전 가이드 (0) | 2025.06.28 |
---|---|
파이썬 변수와 데이터 타입 정리: 기초부터 실전까지 한눈에! (1) | 2025.06.28 |
파이썬 모듈과 패키지 생성법 완전정리: 실전 예제와 꿀팁까지! (0) | 2025.06.28 |
파이썬 문자열 슬라이싱 기법 완전정복: 실전 활용부터 꿀팁까지! (0) | 2025.06.28 |
파이썬 함수 정의와 호출 방법: 기초부터 실전까지 완벽 가이드 (0) | 2025.06.28 |