Python Basics (4)
Python에서는 Iterable 객체를 손쉽게 다룰 수 있다. Python에서는 구조적으로 거의 모든 개체를 iterator로 사용할 수 있도록 지원한다고 한다. 오늘은 이와 관련하여 Iterable, Iterator 둘에 대해 알아보았다.
Iterable / Iterator
Iterable은 가지고 있는 값을 한 번에 하나씩 반환할 수 있는 개체를 뜻한다. 그 예로 List, String, Tuple 등이 있을 것이다. 하지만 Iterable이 꼭 한 번에 값을 하나씩 반환해야 하는 것은 아니다. 한 번에 모든 값을 반환할 수도 있다. 이와 다르게 Iterator은 한 번에 하나씩만 값을 반환하는 개체이다. 그래서 정리하자면 Iterable 개체 중에서 한 번에 하나씩 값을 반환하는 것만 Iterator이라고 부를 수 있는 것이다.
def main():
x = [1, 2, 3]
y = {"red":"빨강", "blue":"파랑", "green":"초록"}
x_iter = iter(x)
y_iter = iter(y)
print(type(x_iter))
print(type(y_iter))
print(next(x_iter))
print(next(y_iter))
if __name__ == "__main__":
main()
iter() 안에 각각 list, dictionary를 넣은 결과 각각 type이 list_iterator와 dict_keyiterator로 변환된 것을 확인할 수 있다. Iterator 개체에는 next 함수를 사용하여 다음 값을 위와 같이 출력해낼 수 있다. 하지만, 단순한 iterable 개체(list, dictionary)에 next 함수를 사용하면 오류가 발생하는 것을 확인할 수 있을 것이다. Python에서 for 문에서 사용하는 iterator로 따로 변환해주지 않음에도 잘 작동하는 것은 for 문에서 자동적으로 iterable 개체를 iterator로 임시 변환을 시켜주기 때문이라고 한다.
Iterator에 대해 정리해보자면, Iterator은 다른 Iterable 개체와 다르게 지닌 값 중에서 이미 반환한 상태, 어디부터 반환해야 할지 상태를 갖는다고 한다. 그리고 이 정보들을 활용하여 Python next() 함수를 사용하여 다음 값을 순차적으로 반환할 수 있는 것이다.