[Python]iterators

최창현·2022년 1월 4일
0

iterators

이터레이터는 값을 순차적으로 꺼내올 수 있는 객체이다.
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


profile
chch_oi

0개의 댓글