Python 강좌 : 제 41강 - 반복자
반복자(Iterator)
반복자(Iterator)
란 반복 가능한(iterable)
형식의 멤버를 순차적으로 반환할 수 있는 객체를 의미합니다.
배열 등의 요솟값을 순차적으로 접근할 때 사용합니다.
배열에서 색인(index)
으로 값을 접근할 때는 데이터 메모리 레이아웃에서 배열의 시작 주소값
과 오프셋(offset)
값으로 배열의 요소에 접근합니다.
즉, 배열에 접근할 때에는 배열 요소의 크기와 개별 요소에 접근하는 방식 등을 모두 고려해 접근합니다.
하지만, 반복자를 사용하면 값이 필요할 때 값을 생성하거나 계산해 반환합니다.
이를 느긋한 계산법(Lazy evaluation)
이라 하며, 실제 값이 필요할 때까지 계산을 미루게 되므로 실행 속도 향상과 메모리 사용량을 줄일 수 있습니다.
또한, 데이터 내부 구조
나 접근 방식
등에 상관 없이 요솟값에 접근할 수 있습니다.
반복자(Iterator) 사용하기
- 결과
- 1
2
3
반복자(Iterator)
는 iter()
함수를 통해 반복 가능한 형식의 객체를 생성할 수 있습니다.
iterator
형식의 객체만 가능하며, next()
함수로 다음 번째 요솟값을 참조할 수 있습니다.
next()
마다 다음 요솟값을 참조하게 되며, 마지막 요솟값 참조 이후에도 다음 값을 호출하는 경우엔 StopIteration
예외를 발생시킵니다.
반복문과 동시 사용
- 결과
- a
b
c
d
next()
함수와 반복문
등을 동시에 사용하게 되면, next()
함수를 호출한 것과 동일한 기능을 합니다.
next()
함수로 요솟값에 접근한 다음, 반복자
에 반복문
을 사용한다면 이미 앞서서 다음 번째 값을 계산하였기 때문에 순차적으로 출력됩니다.
반복문
이후에 next()
함수로 다음 값을 호출한다면, 더 이상 참조할 값이 없어 StopIteration
예외를 발생시킵니다.
itertools 모듈
- 결과
- 0
1
2
…
8893
…
itertools
모듈의 count()
함수를 사용한다면, 크기가 무한한 형태의 반복자를 구현할 수 있습니다.
반복문을 종료하거나 프로세스를 직접 종료하지 않는다면 count
가 무한히 증가합니다.
이를 통해, 무한히 반복하거나 매우 큰 횟수의 반복을 구현할 수 있습니다.
- Tip :
infinite = range(10 ** 10000000000000000)
의 형태로도 구현이 가능하지만, 앞서 설명한 것처럼 배열을 계산해야하므로 실행까지 큰 시간이 필요하거나 메모리가 부족할 수 있습니다.
댓글 남기기