파이썬에서의 생성자(Generator) 이해
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
Python 개발자 및 중급 이상의 프로그래머
핵심 요약
- Generator는
yield
키워드를 사용하여 값을 하나씩 반환하는 함수 기반의 이터레이터 next()
메서드로 생성자 객체의 값을 순차적으로 접근 가능하며, 메모리 효율성을 높임yield from
은 이터러블 객체의 요소를 순차적으로 반환하는 확장 기능StopIteration
예외는 생성자가 더 이상 반환할 값이 없을 때 발생
섹션별 세부 요약
1. 생성자 정의 및 특징
- Generator는
yield
또는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
) v1
과v2
는 동일한 생성자 객체를 참조하여 값 공유 가능- 예시:
v2 = v1
→next(v2)
는v1
의 다음 값 반환
6. 생성자 표현식
(x**2 for x in range(6))
형식의 생성자 표현식 사용 가능- 생성자 표현식은
generator
객체로 생성되며next()
메서드로 접근 가능
결론
- 대규모 데이터 처리 시 생성자를 사용하여 메모리 사용량 최소화
yield from
을 사용해 중첩된 이터러블을 쉽게 처리StopIteration
예외를 처리하는 데next()
의default
인자 활용- 생성자 표현식은 간결한 구문으로 복잡한 이터레이션 로직 구현 가능