- [BW 33] yield from을 사용해 여러 제너레이터를 합성하라2024년 11월 08일
- 31514
- 작성자
- 2024.11.08.:52
다음은 제너레이터를 사용해 화면의 이미지를 움직이게 하는 그래픽 프로그램 예제이다.
처음에는 이미지가 빠르게 이동하고, 잠시 멈춘 다음, 다시 이미지가 느리게 이동한다.
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) >>> 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
이 코드의 문제점은 animate가 너무 반복적이라는 것이다.
yield from 식을 사용하면 이 문제를 해결할 수 있다.
def animate(): yield from move(4, 5.0) yield from pause(3) yield from move(2, 3.0)
yield from은 근본적으로 파이썬 인터프리터가 우리 대신 for 루프를 내포시키고 yield 식을 처리하도록 만든다.
이로 인해 성능 또한 좋아진다.
'Book > 파이썬 코딩의 기술' 카테고리의 다른 글
[BW 37] 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라 (2) 2024.11.11 [BW 32] 긴 리스트 컴프리헨션보다는 제네레이터 식을 사용하라 (2) 2024.11.01 [BW 31] 인자에 대해 이터레이션할 때는 방어적이 돼라 (1) 2024.10.31 [BW 30] 리스트를 반환하기보다는 제너레이터를 사용하라 (2) 2024.10.30 [BW 29] 대입식을 사용해 컴프리헨션 안에서 반복 작업을 피하라 (0) 2024.10.29 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)