We.TIL 08 : Iterator

김기욱·2020년 7월 27일
0

We.TIL

목록 보기
13/69

Iterator의 개념과 사용법

상단의 이미지는 네이버 영어사전에서 나온 iterator의 뜻이다.
파이썬에서의 iterator의 뜻도 크게 다를바 없다.
파이썬 안에서 iterator란 '반복 가능한 객체'를 의미한다.

L = [1,2,3] 이란 integer들로 이뤄진 평범한 리스트를 한 번 살펴보자.
리스트안에 요소들로는 1,2,3밖에 보이지 않지만 dir 함수를 써보면 그 속에 숨겨진 다양한 함수들이 튀어나오게 된다.

dir 함수 : dir() 내장 함수는 어떤 객체를 인자로 넣어주면 해당 객체가 어떤 변수와 메소드(method)를 가지고 있는지 나열해줍니다. (from WikiDocs)

L=['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
 '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
 '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
 '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__',
 '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
 '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__',
 '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend',
 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

대부분의 함수들은 built_in(내장)함수들이며, 그 중에서는 __iter__라는 함수도 보인다. 즉 [1,2,3]은 반복가능한 객체라는 것을 의미한다.

다음과 같이 L을 iterator함수를 써준 후 이를 다시 변수에 저장해보자.
dir함수를 써보면 다음과 같은 next라는 새로운 함수가 생긴것을 볼 수 있다.

Iterator_L = L.__iter__()
Iterator_L = ['__class__', '__delattr__', '__dir__', '__doc__',
 '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
 '__init__', '__init_subclass__', '__iter__', '__le__',
 '__length_hint__', '__lt__', '__ne__', '__new__', '__next__',
 '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
 '__setstate__', '__sizeof__', '__str__', '__subclasshook__']

next함수는 다음 요소를 하나씩 꺼내오는 함수다. 그러므로 iter함수와 next함수를 이용해 for문 대신 사용을 할 수 있다.

iter함수 next함수 모두 iter(), next() 형태로 사용가능하다. 이는 둘 다 파이썬 자체에 내장되어있는 built_in 모듈이기 때문이다.

iterator를 이용한 while 구문 :

I = iter(L)
while True:
    try:
        X = next(I)
    except StopIteration:
        break
    print( X**2, end=" ")

결과값 : 1, 4, 9
except를 쓰는 이유는 인덱스 범위를 넘어가면 StopIteration이라는 오류가 발생하기 때문이다. 그러므로 except를 넣어 오류문구를 발생시키지 않게 해주면 깔끔하게 while구문을 완성시킬 수 있다.

Assignments

문제 :

딕셔너리도 반복가능한 객체라서 앞서본 리스트와 같이 iter함수와 next함수를 사용할 수 있고 파이썬 기본함수인 iter, next 또한 사용할 수 있습니다. 다음의 간단한 키를 출력하는 딕셔너리에 대한 for 문을 while문으로 구현해 보세요.

D = {'a':1, 'b':2, 'c':3}
for key in D.keys():
    print(key)

해답 :

딕셔너리 D의 키값을 반환하는 for문이므로 iter를 D의 키값으로
지정해주고 next를 통해 반환시키면 된다.

iter(D.keys())대신에 iter(D)로 설정해도 출력값을 동일하게 나오는데 딕셔너리를 반환할때 key가 반환되는게 기본설정이여서 그런것 같다.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글