포도가게의 개발일지

파이썬 (11) 본문

Tech

파이썬 (11)

grape.store 2025. 7. 19. 22:15
반응형

파이썬 제어 흐름

  • Iter는 프로그래밍에서 데이터 구조를 순차적으로 접근할 수 있게 하는 객체로, 반복 가능한 객체(iterable)에서 요소를 차례로 가져올 수 있는 객체를 의미.
  • yield from은 서브 제너레이터나 반복 가능한 객체에서 값을 직접 전달받아 호출한 제너레이터로 다시 값을 전달하는 역할을 함.
  • Iterable: 반복 가능한 객체.
  • Iterator: 반복자를 통해 요소를 차례로 접근.
  • Generator: 제너레이터는 이터레이터를 생성하며, yield를 사용하여 값을 순차적으로 생성.
  • iter() 함수를 사용해 반복 가능한 객체를 이터레이터로 변환.
  • next()로 다음 요소를 가져옴.

단어의 시퀀스

  • 파이썬이 객체 x를 반복해야할때 언제나 iter()를 자동으로 호출한다.
  • iter()는 iter구현을 확인후 호출하여 iterator를 가져온다.
  • 없다면, getitem이 구현되어있으면 파이썬은 index 0 부터 순서대로 가져오는 iterator를 생성한다.
  • 여기서 실패하면 obeject is not iterable error가 발생한다.

센티넬

  • 센티넬(sentinel)은 "감시자"나 "종료 신호" 역할을 하는 특별한 값이에요. 반복(iteration)에서 "여기서 멈춰!"라는 플레이스홀더로 사용되죠. 보통 None, 특정 문자열, 숫자 등 고유한 값을 지정해서, 반복이 언제 끝날지 알리는 데 쓰입니다.

반복형 자체를 반복자로 만들면 안되는 이유

  • GOF에 따르면 다중 순회를 지원하려면 동일한 반복형 인스턴스로부터 여러 개의 독립적인 반복자를 생성할수있어야한다.
  • 각 반복자는 각각 고유한 내부상태를 유지해야한다.

Iterator를 따로 구현하고싶지않을때는 Generator, 작동방식

  • 본체 안에 yield 키워드가 있는 함수는 모두 제너레이터다. 제너레이터 함수는 호촐되면 제너레이터 객체를 반환한다. 제너레이터 함수는 제너레이터 팩토리이다.
  • 제너레이터 반환 객체는 iterator protocol을 따르며 next()가 호출할때마다 실행되고 suspend됩니다.
  • 왜 제너레이터가 더 나을까?: 클래스 방식의 interator 구현은 boilerplate 코드 많음 (인덱스 관리 등). 제너레이터는 yield로 간단히 구현 가능.

코루틴과 제너레이터

  • 코루틴은 사실 제너레이터 함수로 본체 안에 yield 키워드를 가진다.
  • 제너레이터는 반복하기 위한 데이터를 생성한다
  • 코루틴은 데이터의 소비자다
  • send() 를 통해 제너레이터 내부 yield에 값을 전달한다. close(), throw()로 종료시킬수있다.

yield from

  • 서브 제너레이터로 하위에 다른 제너레이터에게 yield를 위임함. 중첩된 코루틴 연결에 유용

'Tech' 카테고리의 다른 글

파이썬 (12)  (3) 2025.07.30
Chrome extension (브라우저 확장 프로그램)  (0) 2025.07.26
파이썬 (10)  (0) 2025.07.18
파이썬 (9)  (0) 2025.07.15
파이썬 (8)  (1) 2025.07.14
Comments