• 티스토리 홈
  • 프로필사진
    31514
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
31514
  • 프로필사진
    31514
    • 분류 전체보기 (106)
      • Book (66)
        • Learning SQL (9)
        • SQL 레벨업 (8)
        • 견고한 데이터 엔지니어링 (5)
        • 운영체제 (2)
        • 스파크 완벽 가이드 (9)
        • 파이썬 코딩의 기술 (29)
        • 분산 컴퓨팅 (4)
      • 개발 (24)
      • 기타 (10)
        • 출퇴근 공부 간단 정리 (7)
      • ELK (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
      • 31514의 이전 블로그는 여기로!
      등록된 공지가 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • [BW 33] yield from을 사용해 여러 제너레이터를 합성하라
      2024년 11월 08일
      • 31514
      • 작성자
      • 2024.11.08.오전10: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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바

      단축키

      내 블로그

      내 블로그 - 관리자 홈 전환
      Q
      Q
      새 글 쓰기
      W
      W

      블로그 게시글

      글 수정 (권한 있는 경우)
      E
      E
      댓글 영역으로 이동
      C
      C

      모든 영역

      이 페이지의 URL 복사
      S
      S
      맨 위로 이동
      T
      T
      티스토리 홈 이동
      H
      H
      단축키 안내
      Shift + /
      ⇧ + /

      * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.