파이썬에서의 반복자(Iterator) (1)

카테고리

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

서브카테고리

개발 툴

대상자

  • Python 개발자
  • 난이도: 기초 수준 (반복자 개념과 사용법 학습)

핵심 요약

  • 반복자(Iterator)__iter__()__next__() 메서드를 구현한 불변 객체로, 메모리 효율을 위해 요소를 한 번에 하나씩 반환합니다.
  • iter() 또는 __iter__()로 생성되며, next() 또는 __next__()로 요소를 얻을 수 있습니다.
  • 인덱싱/슬라이싱 불가, len() 사용 시 list(), tuple() 등으로 변환 후 또는 more_itertools.ilen()을 사용해야 합니다.

섹션별 세부 요약

1. 반복자(Iterator)의 정의와 특성

  • 반복자StopIteration 예외를 발생시켜 종료되는 반복 가능한 객체입니다.
  • len() 사용 시, list(), tuple() 등으로 형변환하거나 more_itertools.ilen()을 사용해야 합니다.
  • 인덱싱/슬라이싱 불가 (예: v2[0] 또는 v2[0:2]는 오류 발생).

2. `iter()` 함수의 사용법

  • iter(object, sentinel)의 두 가지 인자:

- object: iterable 또는 callable 타입 (예: v1 = ['a', 'b', 'c', 'd']에서 iter(v1)).

- sentinel: objectsentinel과 동일한 값을 반환할 때 오류를 발생시킴 (예: iter(get_random_numbers, 3)).

3. `next()` 및 `__next__()` 메서드

  • next(iterator, default)에서 default를 지정하면 반복자가 종료될 때 default 값을 반환 (예: next(v2, 'No value')).
  • __next__()next()와 동일한 기능을 제공하지만, 인자 없이 호출됩니다.

4. `len()` 사용 제한

  • 반복자 자체로 len() 사용 불가 (예: len(v2)는 오류).
  • 형변환 또는 more_itertools.ilen()을 통해 길이 계산 (예: len(list(v2)), ilen(v5)).

5. 예제 코드

  • iter()로 생성된 반복자:

```python

v2 = iter(v1)

print(next(v2)) # 'a'

```

  • more_itertools.ilen() 사용 예:

```python

from more_itertools import ilen

print(ilen(v5)) # 4

```

결론

  • 반복자 사용 시 iter()next()를 활용하고, len() 계산은 list()/tuple() 변환 또는 more_itertools.ilen()을 통해 처리하세요.
  • StopIteration 예외 처리를 위해 next()default 인자를 활용하는 것이 실무에 유리합니다.