이터레이터는 값을 순차적으로 꺼내올 수 있는 객체이다.
L이라는 다음 리스트가 있을 때 for loop문으로 값마다 제곱을 하는 코드는 다음과 같다.
L = [1,2,3] :iterable for x in L: print(x ** 2, end=' ')
L 리스트가 반복 가능한 객체인지 확인해보는 방법은 dir로 호출하여 iter함수가 있는지
확인할 수 있다.
dir로 출력해보면 iter함수가 들어있는 것을 확인할 수 있다.
print(L.__iter__())
이터레이터를 변수에 저장후에 next 함수를 호출하면 for문이 동작하는 것처럼 값을 하나씩
꺼내올 수 있다. 우선 dir로 변수에 저장한 이터레이터를 확인한다. print문으로 확인하면
next 함수가 들어있는 것을 확인할 수 있다. (다음 요소를 하나씩 꺼내오는 함수)
L = [1,2,3] :iterable iterator_L = L.__iter__() print(iterator_L.__next__()) # 1 print(iterator_L.__next__()) # 2 print(iterator_L.__next__()) # 3 print(iterator_L.__next__()) # StopIteration 발생
1,2,3이 출력되고 StopIteration이 발생하는 것을 확인.
즉, 리스트의 인덱스를 벗어나서 가져올 값이 없으면 StopIteration이 발생한다.
#iter와 next 함수
iter는 객체의 iter함수를 호출해주고, next는 객체의 next함수를 호출해준다.
예시 코드는 다음과 같다.
L = [1,2,3,4] I = iter(L) # == I = L.__iter__() while True: try: X = next(I) # I.__next__() except StopIteration: break print( X**2, end="")
딕셔너리도 반복가능한 객체라서 앞서본 리스트와 같이 iter 함수와 next 함수를 사용할 수 있고 파이썬 기본함수인 iter, next 또한 사용할 수 있다. 다음의 간단한 키를 출력하는
딕셔너리에 대한 for문을 while문으로 구현한다면 다음과 같다.
for문 예시
D = {'a':1, 'b':2, 'c':3} for key in D.keys(): print(key)
while문으로 구현한 코드
while i < len(D)+1: reverse_D = dict(map(reversed,D.items())) print(reverse_D.get(i)) i+= 1