728x90
반응형
이터레이터(Iterator)
- 반복 가능한 객체를 순회할 수 있는 객체
- 반복 가능한 객체란? -> List, tuple, set 등
- 반복 가능한 객체 != 이터레이터
- 반복 가능한 객체 == 이터러블(iterable) 객체 (반복가능하면 이터레이터로 만들 수 있는 것)
- 이터러블 객체는 __iter__() method를 가지고 있고, 이 method는 이터레이터를 반환하는 역할
- 이터러블 객체는 iter() 함수를 이용하여 이터레이터로 만들 수 있
mylist = [1, 2, 3]
next(mylist)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not an iterator
# Iterable하다는 것이 Iterator라는 것은 아니다!
- 이터러블 객체에서 값을 하나씩 꺼내는 역할을 하는 객체
- 이터레이터는 __next__() method를 가지고 있고, 이 method는 다음 값을 반환하는 역할. 더 이상 반환할 값이 없으면 StopIteration exception을 발생
- 이터러블 객체는 __iter__() method를 통해 자기 자신을 반환
my_list = [1, 2, 3] # 이터러블 객체
# 이터러블 객체에서 이터레이터를 얻음
my_iterator = iter(my_list)
print(next(my_iterator)) # 출력: 1
print(next(my_iterator)) # 출력: 2
print(next(my_iterator)) # 출력: 3
print(next(my_iterator)) # StopIteration 예외 발생
- 이터레이터의 값을 가져올 때, 일반적으로는 for문 사용
- next() 함수를 따로 호출할 필요없음
- StopIteration 예외도 신경쓸 필요없음
my_list = [1, 2, 3]
my_iterator = iter(my_list)
for i in my_iterator:
print(i)
# 1
# 2
# 3
- 직접 이터레이터 구현하기
class MyIterator:
def __init__(self, data):
# 생성자: 데이터와 현재 위치를 초기화합니다.
self.data = data
self.position = 0
def __iter__(self):
# 이터레이터 객체 자체를 반환합니다.
return self
def __next__(self):
# 데이터의 끝에 도달하면 StopIteration 예외를 발생시킵니다.
if self.position >= len(self.data):
raise StopIteration
# 현재 위치의 데이터를 반환하고 위치를 1 증가시킵니다.
result = self.data[self.position]
self.position += 1
return result
if __name__ == "__main__":
# MyIterator 클래스의 인스턴스를 생성합니다.
i = MyIterator([1, 2, 3])
# for 루프를 사용하여 이터레이터를 순회합니다.
for item in i:
print(item)
728x90
반응형
'Programming Language > Python' 카테고리의 다른 글
[FastAPI] 1. 간단한 FastAPI 만들기 (0) | 2024.06.18 |
---|---|
[Python] 제너레이터(Generator) (1) | 2024.06.14 |
[Python][Anaconda] Solving environment: failed with initial frozen solve. Retrying with flexible solve. (2) | 2024.01.13 |
[Python] 정규표현식 (1) | 2023.12.29 |
[Python] Selenium을 이용한 동적 크롤링 (1) | 2023.12.29 |