파이썬에서 iterable과 iterator는 둘 다 데이터를 순회(iterate)하는 개념을 나타내는 데 사용되는 용어다. 그러나 둘은 서로 다른 개념을 나타낸다.
그럼 둘의 개념을 하나씩 차례대로 살펴보자.
1. Iterable(반복 가능한 객체)
Iterable은 순회 가능한 객체로, 내부에 여러 항목을 가지고 있으며 이를 순차적으로 반복할 수 있는 객체를 의미한다.
Iterable은 for나 while 루프를 통해 순회하거나, iter() 함수를 사용하여 iterator로 변환할 수 있다.
Iterator는 값을 순회하는 객체로, __next__() 함수나 next() 함수를 통해 다음 값을 반환하고, 더 이상 반환할 값이 없을 때 StopIteration 예외를 발생시킨다. Iterator는 iter() 함수로 생성되며, 자체적으로 순회 상태를 가지고 있다.
파이썬에서 iterable이 가능한 자료구조는 다음과 같다.(아래 항목 외에 더 있음)
- 리스트(list)
- 튜플(tuple)
- 문자열(string)
- 세트(set)
- 딕셔너리(dictionary)
- 파일(file)
2. iter() 함수는 어떤 것이고 어떻게 사용하는 걸까?
iter() 함수는 파이썬에서 사용되는 내장 함수로, Iterable 객체를 iterator로 변환하는 역할을 한다. 이 함수는 iterable 객체를 인자로 받아서 해당 객체를 순회 가능한 iterator로 변환해 주는 역할을 한다.
iter(iterable)
iter함수의 문법
위의 예시에서 파라미터로 들어가는 iterable은 iterator로 변환하고자 하는 iterable 객체를 넣어야 한다.
lst = [1, 2, 3, 4, 5]
x = iter(lst) # 리스트를 iterator로 변환
위 코드에서 lst라는 리스트를 iter() 함수로 iterator로 변환하였다. 이제 x는 lst의 요소를 하나씩 순회하며 가져오는 iterator이다. iterator로 변환되었기 때문에 next() 함수를 사용하여 순회할 수 있다.
print(next(x)) # 출력: 1
print(next(x)) # 출력: 2
print(next(x)) # 출력: 3
위와 같이 next 함수로 순차대로 순환객체 요소에 접근할 수 있다.
3. 반복문을 이용한 iterable 객체 사용법
for문
for item in x:
print(item)
while문
try:
while True:
item = next(x)
print(item)
except StopIteration:
pass # StopIteration 예외 처리
iterator는 더 이상 반환할 값이 없을 때 StopIteration 예외를 발생시키는 특징을 가지고 있기 때문에 try except문으로 감싸주는 게 좋다.
읽어주셔서 감사합니다.