iterator

김현우·2020년 7월 27일
0

이터레이터란?

값을 순차적으로 꺼내올 수 있는 객체

L 리스트가 반복 가능한 객체인지 확인해보는 방법은 dir 로 호출하여 __iter__ 함수가 있는지 확인해볼 수 있음.

L = [1, 2, 3]

print(dir(L))

dir 로 호출하여 iter 함수가 있는지 확인

결과값은,

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']

__iter__ 함수가 들어있는 것을 확인가능!

iterator_L 이라는 변수에 L이라는 리스트에 __iter__라는 메소드를 호출해주면, iterator_L이라는 변수는 next() 메소드가 사용이 가능한 Iterator가 된다.

이터레이터를 변수에 저장후에 __next__ 함수를 호출하면 for문이 동작하는 것처럼 값을 하나씩 꺼내올 수 있습니다. __next__ 함수는 다음 요소를 하나씩 꺼내오는 함수입니다.

# 이터레이터를 변수에 저장
iterator_L = L.__iter__()
iterator_L = iter(L)

# next함수 호출
iterator_L.__next__()
next(iterator_L)

리스트의 인덱스를 벗어나서 가져올 값이 없으면 StopIteration이 발생!

Assignments

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

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

Solution

D = {'a':1, 'b':2, 'c':3}

D=D.values()
i = iter(D)
while True:
  try:
    x=next(i)
  except StopIteration:
    break
  print(x)
profile
코딩을 잘하는 개발자가 되자!

0개의 댓글