제너레이터를 사용하여 화면의 이미지 움직이기
def move(period, speed):
for _ in range(period):
yield speed
def pause(delay):
for _ in range(delay):
yield 0
"""
두 개의 함수를 합성
"""
def animate():
for delta in move(4,5,0):
yield delta
for delta in pause(3):
yield delta
for delta in move(2,3,0):
yield delta
def render(delta):
print(f'Delta: {delta:.1f}')
#화면에서 이미지 이동
...
def run(func):
for delta in func():
render(delta)
run(animate)
"""
단점: animate가 너무 반복적이다.
for문과 yield식이 반복되면 잡음이 늘고 가독성이 줄어든다
"""
해결
yield from식 사용
고급 제너레이터 기능
제어를 부모 제너레이터에게 전달 전 까지 내포된 제너레이터가 모든 값 내보냄
def animaete_composed():
yield from move(4,5,0)
yield from pause(3)
yield from move(2,3,0)
run(animate_composed)
"""
코드가 명확해지고 직관적이된다.
yield from은 for루프 내포시키고 yield식을 처리하도록 만든다
"""