파이썬에서의 이터레이터 사용법 (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__()
메서드를 반드시 구현해야 함.