1. Iterator
1-1. Iterable 객체
파이썬에서 iterable 객체란 '반복 가능한 객체'를 의미한다. 대표적인 예로, for 문에서 사용하는 리스트, 튜플, 문자열 등이 바로 iterable 객체이다.
1-2. Iterable 객체이기 위한 조건
어떤 객체의 타입(클래스)이 A라고 해보자. 그러면 다음과 같은 조건을 만족할 때 A 타입의 객체가 곧 iterable 객체가 된다.
- 클래스 A는
__iter()__
메소드를 구현해야 한다. 반드시 iterator 객체를 반환하도록 구현해야 한다. (→ 해당 iterator 객체는 동일한 클래스(A)의 객체여도 되고 별도로 작성된 다른 클래스의 객체여도 된다.)
- iterator 객체의 클래스(A 혹은 다른 클래스)는 반드시
__next__()
메소드를 구현해야 한다(python 2라면next()
메소드).
1-3. Iterator 관련 파이썬 내장 함수 (built-in function)
내장 함수 | 설명 |
iter(iterable 객체) | 해당 iterable 객체의 iterator 객체를 반환한다. ( __iter()__ 메소드 호출) |
next(iterator 객체) | 해당 iterator 객체의 다음 요소를 반환한다. ( __next()__ 메소드 호출) |
1-4. 참고: for 문의 동작 원리
- 먼저 해당 iterable 객체의
__iter()__
메소드를 호출하여 itetator 객체를 얻어낸다.
- 이후,
next()
내장 함수를 이용하여 반복을 수행한다(내부적으로__next()__
메소드 호출).
2. Generator
2-1. Generator 함수
파이썬에서 generator 함수란 generator라고 불리는 특별한 종류의 iterator를 반환하는 함수를 말하며,
yield
키워드를 사용하여 정의할 수 있다.몸체 코드는 해당 generator를 대상으로 파이썬 내장 함수
next()
를 호출할 때마다 실행되며, 예외가 발생하면 종료하게 된다. 몸체 코드 실행 도중 yield
키워드를 만나면 현재의 상태(지역 변수, PC 값 등등)를 기록하고 실행을 중지한 뒤, 반환 값을 next()
함수 호출부로 전달하게 된다. 이후 다시 next()
함수를 호출하면 마치 외부 함수를 호출하고 돌아갈 때처럼 기억해둔 그 상태로 돌아가서 실행을 재개하게 된다.따라서 일반적인 iterator에 비해서 메모리를 월등히 절약할 수 있고, 계산 결괏값이 필요할 때까지 계산을 지연시키는 효과를 발휘할 수 있다.
2-2. Generator 함수 작성 예시
2-3. Generator Expression
List Expression과 달리, 실제 리스트 요소 데이터 전체를 반환하지 않는다. 대신, 그 표현식만을 갖는 generator 객체를 반환하게 된다. 따라서 메모리를 절약할 수 있다.
본 글은 아래 링크의 내용을 참고하여 학습한 내용을 나름대로 정리한 글임을 밝힙니다.