코루틴에서 값 반환하기

매일 공부(ML)·2023년 5월 10일
0

Fluent Python

목록 보기
118/130

제어 흐름

코루틴

코루틴에서 값 반환하기

averager() 코루틴을 변형해서 값을 반환하고, 활성화할 때마다 이동 평균을 생성하지 않는다.
의미 있는 값을 생성하지는 않지만 최후에 어떤 의미 있는 값을 반환하는 코루틴도 있음을 설명해야 한다.

#결과를 반환하는 averager() 코루틴 코드
from collections import namedtuple

Result = namedtuple('Result', 'count average')

def averager():
	total = 0.0
    count = 0
    average = None
    while True:
    	term = yield
        if term is None:
        	break
        total += term
        count += 1
        average = total/count
    return Result(count, average)

#averager()의 동작을 보여주는 doctest
coro_avg = averager()
next(coro_avg)
coro_avg.send(10)
coro_avg.send(30)
coro_avg.send(6.5)
coro_avg.send(None)

return 문이 반환하는 값은 StopIteration 예외의 속성에 담겨 호출자에 밀반입됨에 주의하고, 실행이 완료되면 StopIteartion 예외를 발생시키는 기존 제너레이터 객체의 작동 방식을 유지한다.

coro_avg = averager()
next(coro_avg)
coro_avg.send(10)
coro_avg.send(30)
coro_avg.send(6.5)
try:
	coro_avg.send(None)
except StopIteration as exc:
	result = exc.value
result
profile
성장을 도울 아카이빙 블로그

0개의 댓글