값을 순차적으로 꺼내올 수 있는 객체
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
이 발생!
딕셔너리도 반복가능한 객체라서 앞서본 리스트와 같이 iter함수와 next함수를 사용할 수 있고 파이썬 기본함수인 iter, next 또한 사용할 수 있습니다. 다음의 간단한 키를 출력하는 딕셔너리에 대한 for 문을 while문으로 구현해 보세요.
D = {'a':1, 'b':2, 'c':3}
for key in D.keys():
print(key)
D = {'a':1, 'b':2, 'c':3}
D=D.values()
i = iter(D)
while True:
try:
x=next(i)
except StopIteration:
break
print(x)