yield from

매일 공부(ML)·2022년 6월 24일
0

이어드림

목록 보기
84/146

yield from을 사용하여 여러 제너레이터 합성

제너레이터를 사용하여 화면의 이미지 움직이기

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식을 처리하도록 만든다
"""
profile
성장을 도울 아카이빙 블로그

0개의 댓글