파이썬에서의 생성자(Generator) 이해

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

Python 개발자 및 중급 이상의 프로그래머

핵심 요약

  • Generatoryield 키워드를 사용하여 값을 하나씩 반환하는 함수 기반의 이터레이터
  • next() 메서드로 생성자 객체의 값을 순차적으로 접근 가능하며, 메모리 효율성을 높임
  • yield from은 이터러블 객체의 요소를 순차적으로 반환하는 확장 기능
  • StopIteration 예외는 생성자가 더 이상 반환할 값이 없을 때 발생

섹션별 세부 요약

1. 생성자 정의 및 특징

  • Generatoryield 또는 yield from 구문을 포함한 함수로 정의됨
  • 생성자 객체는 next() 메서드를 통해 순차적으로 값 반환
  • 생성자가 종료되면 StopIteration 예외 발생
  • yield는 모든 타입의 값을 반환 가능, yield from은 이터러블 객체만 지원

2. `next()` 메서드 사용 예시

  • next(generator, default) 형식으로 사용 가능
  • default 인자 지정 시 생성자가 종료되면 지정된 값 반환
  • 예시: print(next(v, 'No value')) → 생성자 종료 시 'No value' 출력

3. `yield from`의 동작 방식

  • yield from은 이터러블 객체의 요소를 하나씩 반환
  • 예시: yield from [0, 1, 2] → 0, 1, 2 순차적으로 반환
  • 중첩된 이터러블 처리 가능 (예: yield from [ [0,1], [2,3] ] → 0,1,2,3)

4. 생성자와 `for` 문의 연계

  • for 문을 포함한 생성자 함수는 반복 가능한 요소를 순차적으로 반환
  • 예시: for x in [0,1,2]: yield x → 0, 1, 2 반환
  • 중첩된 이터러블 처리 시 yield from 사용 (예: yield from [ [0,1], [2,3] ] → 0,1,2,3)

5. 생성자 객체의 복수 변수 접근

  • 생성자 객체는 여러 변수에 할당 가능 (예: v2 = v1)
  • v1v2는 동일한 생성자 객체를 참조하여 값 공유 가능
  • 예시: v2 = v1next(v2)v1의 다음 값 반환

6. 생성자 표현식

  • (x**2 for x in range(6)) 형식의 생성자 표현식 사용 가능
  • 생성자 표현식은 generator 객체로 생성되며 next() 메서드로 접근 가능

결론

  • 대규모 데이터 처리 시 생성자를 사용하여 메모리 사용량 최소화
  • yield from을 사용해 중첩된 이터러블을 쉽게 처리
  • StopIteration 예외를 처리하는 데 next()default 인자 활용
  • 생성자 표현식은 간결한 구문으로 복잡한 이터레이션 로직 구현 가능