PYTHON · 함수
제너레이터 심화
제너레이터의 send(), throw(), close() 메서드로 양방향 통신을 구현합니다.
함수고급generator제너레이터sendcoroutine
핵심 설명
제너레이터의 send(), throw(), close() 메서드로 양방향 통신을 구현합니다.
Python code
# send()로 값 주입
def accumulator():
total = 0
while True:
value = yield total
if value is None:
break
total += value
gen = accumulator()
next(gen) # 제너레이터 시작 (첫 yield까지)
print(gen.send(10)) # 10
print(gen.send(20)) # 30
print(gen.send(5)) # 35
# 제너레이터로 이동 평균 계산
def moving_average():
total = 0.0
count = 0
average = None
while True:
value = yield average
total += value
count += 1
average = total / count
avg = moving_average()
next(avg) # 초기화
print(avg.send(10)) # 10.0
print(avg.send(20)) # 15.0
print(avg.send(30)) # 20.0
# close()로 제너레이터 종료
avg.close()학습 팁
send()를 사용하기 전에 반드시 next()로 제너레이터를 첫 yield까지 진행시켜야 합니다.
주의할 점
제너레이터에 처음 send()를 호출할 때 None이 아닌 값을 보내면 TypeError가 발생합니다.
자주 묻는 질문
제너레이터 심화란 무엇인가요?
제너레이터의 send() , throw() , close() 메서드로 양방향 통신을 구현합니다.
제너레이터 심화 학습 시 주의할 점은 무엇인가요?
제너레이터에 처음 send() 를 호출할 때 None 이 아닌 값을 보내면 TypeError 가 발생합니다.