yield는 제너레이터(generator) 함수를 만드는 데 사용되는 키워드임.
- 제너레이터는 이터레이터(iterator)를 생성하는 특별한 종류의 함수입니다
yield의 주요 특징:
- 대량의 데이터를 다룰 때 모든 결과를 메모리에 한 번에 저장하지 않고, 필요할 때마다 하나씩 생성합니다.
- 결과를 즉시 계산하지 않고, 요청될 때마다 계산합니다.
- 함수의 상태를 유지하면서 여러 번 호출될 수 있습니다.
시용 예시:
def simple_generator():
yield 1
yield 2
yield 3
# 사용
for num in simple_generator():
print(num)
대규모 파일 데이터 처리 예시:
def large_file_reader(file_path):
with open(file_path, 'r') as file:
for line in file:
yield line.strip()
# 사용
for line in large_file_reader('large_file.txt'):
process_line(line)
무한 시퀀스 사용 예시:
def infinite_sequence():
num = 0
while True:
yield num
num += 1
# 사용
for i in infinite_sequence():
print(i)
if i > 100:
break
send 를 통한 양방향 통신 예시:
- yield 표현식은 값을 생성할 뿐만 아니라, 외부에서 값을 받을 수도 있습니다.
- send() 메서드는 제너레이터에 값을 전달하고, 다음 yield 표현식까지 실행한 후 그 결과를 반환합니다.
- next(gen) 또는 gen.send(None)로 제너레이터를 첫 번째 yield까지 실행합니다.
def echo_generator():
while True:
received = yield
yield f"You said: {received}"
gen = echo_generator()
next(gen) # 제너레이터 초기화
print(gen.send("Hello")) # 출력: You said: Hello
yield 를 사용하는 패턴: for loop 이용
def number_generator():
for i in range(5):
yield i
for num in number_generator():
print(num)
yield 사용 패턴: list(), tuple(), set() 등과 함께 사용 가능
numbers = list(number_generator())
yield 사용 패턴: 컴프리헨션
squares = (x**2 for x in range(10)) # 제너레이터 표현식
for square in squares:
print(square)
yield 사용 패턴: next 를 이용한 수동 제너레이터
gen = number_generator()
print(next(gen)) # 0
print(next(gen)) # 1
'Programming Language > Python' 카테고리의 다른 글
pytest 기본 사용법 정리 (0) | 2025.02.07 |
---|---|
제너레이터(generator) (0) | 2025.02.07 |
Asyncio 와 Aiohttp 정리 (0) | 2024.08.14 |
Jupyter notebook 에서 argparse 를 사용할 때 발생하는 에러 (0) | 2024.08.07 |
언패킹 (Unpacking) (0) | 2024.07.10 |