파이썬에서의 이터레이터 사용법 (2)

카테고리

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

서브카테고리

개발 툴

대상자

  • 초급~중급 Python 개발자
  • 이터레이터/제너레이터 개념 이해 및 구현 방법을 학습하고자 하는 개발자
  • 복잡한 데이터 구조를 순회하는 방식을 정리하고자 하는 경우

핵심 요약

  • iter() 함수는 튜플, 세트, 딕셔너리 등 다양한 데이터 구조에서 이터레이터를 생성 (iter(v1)).
  • 제너레이터는 yield 키워드로 이터레이터를 생성하며, generator 객체로 반환 (func()).
  • 이터레이터는 __next__()__iter__() 메서드를 통해 직접 제어 가능 (예: cls.__next__()).

섹션별 세부 요약

1. `iter()` 함수 활용 예시

  • 튜플, 세트, 딕셔너리에서 이터레이터 생성 가능 (예: iter(v1)).
  • 딕셔너리의 keys(), values(), items() 메서드를 통해 이터레이터 생성 가능.
  • 이터레이터는 for 루프로 순회 가능.

2. 제너레이터 사용법

  • yield 키워드로 제너레이터 함수 정의 (예: def func(): yield 'a').
  • 제너레이터 컴프리헨션으로 이터레이터 생성 (예: (x.upper() for x in [...])).
  • 제너레이터는 generator 객체로 반환되며, next()로 요소 접근 가능.

3. 이터레이터의 동작 방식

  • 이터레이터는 next()로 요소를 하나씩 순회하며, StopIteration 예외로 종료.
  • v2 = iter(v1)v3 = v2는 동일한 이터레이터를 참조.
  • copy()는 얕은 복사, deepcopy()는 깊은 복사 (보안 및 안정성 측면에서 deepcopy() 권장).

4. 커스텀 이터레이터 구현

  • __next__() 메서드를 정의해 직접 이터레이터 구현 가능 (예: class cls: def __next__(self): ...).
  • __iter__() 메서드를 통해 이터레이터 객체 반환 (예: def __iter__(self): return iter([...])).
  • iter() 함수로 커스텀 클래스의 이터레이터를 생성 가능 (예: iter(v)).

결론

  • 이터레이터는 iter()로 생성하고, next()로 순회하며, StopIteration 예외로 종료.
  • 제너레이터는 yield로 간단하게 구현 가능하며, 메모리 효율이 높음.
  • 커스텀 이터레이터를 구현할 경우 __next__()__iter__() 메서드를 반드시 구현해야 함.