Iter() 함수
iter() 함수는 파이썬에서 Iterable 객체를 이터레이터(Iterator)로 변환하기 위해 사용되는 내장 함수이다. Iterable 객체는 여러 값을 포함하고 있는 객체로, 리스트, 튜플, 문자열, 세트 등이 이 트러블 객체의 예시이다. Iterable 객체의 요소를 하나씩 순회하면서 가져올 수 있는 객체를 나타낸다.
iter() 함수의 기본 사용법
iterator = iter(iterable)
위의 코드에서 Iterable은 Iterator로 변환하고자 하는 Iterable 객체를 나타내며, Iterator는 Iterable을 순회하는 데 사용할 수 있는 Iterator 객체이다. Iterator를 사용하면 next() 함수를 사용하여 Iterable 객체의 다음 요소를 가져올 수 있다.
예를 들어, 리스트를 Iterator로 변환하고 순회하는 예제를 한 번 살펴보자.
my_list = [1, 2, 3, 4, 5]
my_iterator = iter(my_list)
print(next(my_iterator)) # 1
print(next(my_iterator)) # 2
print(next(my_iterator)) # 3
iter() 함수를 사용하여 my_list를 반복 가능한 객체로 만들고 next() 함수를 사용하여 값을 하나씩 가져온다.
기본적인 iter() 함수의 사용법에 대해 알아보았으니 이제는 iter() 함수를 사용하는 다양한 예제를 살펴보며 어떻게 다양한 상황에서 사용되는지 살펴보자.
문자열을 Iterator로 변환하고 순회
my_string = "Hello"
my_iterator = iter(my_string)
for char in my_iterator:
print(char)
아마 파이썬을 잘하시거나 파이썬을 조금이라도 하셨던 분들을 눈치채셨겠지만 파이썬에서 문자열을 for 루프로 순회하기 위해서 굳이 iter() 함수를 사용할 필요는 없다. 기본적으로 반복 가능한 객체(예 : 리스트, 튜플, 문자열)은 __iter__() 와 __next__() 의 매직 메서드가 정의되어 있으므로 iterable 한 객체이다. 그래서 우리가 평소에 위의 예제와 같이 리스트,튜플, 문자열같은 객체를 반복문으로 순회할 때 내부적으로 __iter__()와 __next__()가 호출된다.
튜플을 Iterator로 변환하고 순회
my_tuple = (10, 20, 30)
my_iterator = iter(my_tuple)
while True:
try:
value = next(my_iterator)
print(value)
except StopIteration:
break
마찬가지로 튜플 또한 기본적으로 Iterable 한 객체이기 때문에 iter() 함수를 사용하지 않고도 반복문에서 순회할 수 있다.
앞서 언급했듯이, 리스트, 튜플, 문자열 등 기본적으로 모두 Iterable 한 객체이기 때문에 iter() 함수를 굳이 명시하여 순회할 필요가 없다. 그렇다면 여기서 필자가 생겼던 궁금증은 "그럼 iter() 함수를 꼭 사용해야 할 때는 대체 언제인가?"였다.
사용자 정의 iterable 객체
class MyIterable:
def __init__(self):
self.data = [1, 2, 3]
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
result = self.data[self.index]
self.index += 1
return result
else:
raise StopIteration
my_iterable = MyIterable()
my_iterator = iter(my_iterable)
for item in my_iterator:
print(item)
사용자가 직접 클래스를 정의하여 Iterable 객체를 만들 때 iter() 함수를 사용해야 한다. 이 클래스는 __iter__() 메서드를 정의하고, 이 메서드에서 self를 반환하도록 한다. 이렇게 하면 해당 객체가 Iterable 객체로 동작할 수 있다.
- __init__() 메서드는 객체를 초기화하는 메서드이다. 이 메서드에서 data 속성을 생성하여 Iterable 객체가 반복하는 데이터 목록을 정의하고, index 속성을 0으로 초기화한다.
- __iter__() 메서드는 Iterable 객체를 반환해야 한다. Iterable 객체 자체가 반복 가능하게 되도록 self를 반환한다.
- __next__() 메서드는 Iterable 객체가 반복될 때 다음 요소를 반환하는 역할을 한다. index를 사용하여 현재 요소의 인덱스를 추적하고, data 속성에서 요소를 가져온 후 인덱스를 증가시킨다. 인덱스가 데이터 길이를 초가 하면 StopIteration 예외를 발생시켜 반복이 종료된다.
결론적으로, iter() 함수는 모든 Iterable 객체(내장 데이터 타입뿐만 아니라 사용자 정의 클래스나 객체)를 Iterator로 변환할 때 사용할 수 있다. 이 함수는 Iterator를 생성하는 데 도움이 되며, Iterator를 사용하여 객체의 요소를 하나씩 순회할 수 있다. 따라서 iter() 함수는 다양한 상황에서 유용하게 활용할 수 있다.
읽어주셔서 감사합니다.