목차
Iterators (반복자) 정의
Iterator vs. Iterable 차이
Iterator 반복
Iterator 생성
StopIteration 키워드 - 반복 중단
Iterators (반복자) 정의
반복자는 셀 수 있는 수의 값을 포함하는 객체.
1.
반복자는 각각의 모든 값을 순회 가능.
2.
기술적으로, Python에서 반복자는 __iter __() 및 __next __() 메서드로 구성된 iterator protocol 구현하는 객체.
Iterator vs. Iterable 차이
1.
Interable(반복자그릇)은 Iterator (반복자) 담을 수 있는 그릇.
(예) String, List, Tuple, Set, Dictionary
2.
Iterable은 Interator 얻을 수 있을 iter() 메서드 내장.
[예제1] Tuple에서 iterator 반환받아, 값을 1개씩 순차적으로 출력.
code = ("HTML", "CSS", "JS")
lang = iter (code)
print(next (lang) ) # HTML
print(next(lang) ) # CSS
print(next(lang) ) # JS
[예제2] 문자열에서 iterator 반환 받아, 순차적으로 1글자씩 출력.
hz = "홈짱닷컴 Homzzang.com"
chr = iter(hz)
print(next(chr) ) # 홈
print(next(chr) ) # 짱
print(next(chr) ) # 닷
print(next(chr) ) # 닷
Iterator 반복
for 반복문 이용 해, Iterable의 각 요소에 접근 가능.
즉,
for문의 실제 동작은 iterator 객체 생성 후,
각 반복 때 next() 메서드 실행하는 것음.
[예제1] Tuple 요소를 for 반복문 이용해 출력.
code = ("HTML", "CSS", "JS")
for x in code:
print(x)
결과값:
HTML
CSS
JS
[예제2] 문자열의 각 문자를 for 반복문 이용해 출력.
hz = "홈짱닷컴"
for x in hz:
print(x)
결과값:
홈
짱
닷
컴
Iterator 생성
객체나 클래스를 반복자로 생성하려면,
객체나 __iter__() 및 __next()__ 메서드 적용.
1. __iter__() 메서드
__init__() 함수가 모든 클래스에 기본 내장되어 객체 생성 시 초기화 작업 수행하는 것처럼,
__iter__() 함수도 연산의 초기값 지정 역할로 맨 처음 한번 사용 하며, 항상 iterator 객체 자체를 반환 .
2. __next__() 메서드
연산 가능케 하며, 호출할 때마다 iterable에서 다음 요소 반환 .
[예제] 초기값 1 지정 후, 호출할 때마다 1씩 증가.
class Number:
def __iter__(self):
self.n = 1 # 맨 처음 호출 때만 사용.
return self
def __next__(self):
x = self.n
self.n += 1
return x
obj = Number()
num = iter(obj)
print(next(num) ) # 1 (※ self.n은 2 된 후, 1 출력. 초기값 사용)
print(next(num) ) # 2 (※ self.n은 3 된 후, 2 출력. 이전값 사용)
print(next(num) ) # 3 (※ self.n은 4 된 후, 3 출력. 이전값 사용)
StopIteration 키워드 - 반복 중단
위 예제 경우, next() 무한하면 끝도 없이 반복됨.
또한, 아래 예제 경우 조건문이 없다면 무한반복.
2.
무한 반복 막으려면, __next__() 함수 안에 특정 조건일 때 반복 종료 시키는 raise StopInteration 구문 추가.
[예제] 3까지만 반복해 출력.
class Number:
def __iter__(self):
self.n = 1
return self
def __next__(self):
if self.n <= 3:
x = self.n
self.n += 1
return x
else:
raise StopIteration
obj = Number()
num = iter(obj)
for x in num:
print(x)
결과값:
1
2
3
주소 복사
랜덤 이동
최신댓글