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}')
# Move the imgaes onscreen
...
def run(func):
for delta in func():
render(delta)
run(animate)
想像我們在螢幕上用不同速度輪播不同照片來做成動畫,有的時候也會在中間暫停一下。
Delta: 5.0
Delta: 5.0
Delta: 5.0
Delta: 5.0
Delta: 0.0
Delta: 0.0
Delta: 0.0
Delta: 3.0
Delta: 3.0
改用yield from不僅是看起來更簡潔,重點是可以獲得更佳的運算效能。
def animate_composed():
yield from move(4, 5.0)
yield from pause(3)
yield from move(2, 3.0)
run(animate_composed)