PHpullh
학습 라이브러리/Python/제너레이터 심화

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 가 발생합니다.