이터레이터객체(iterable object)
이터러블객체란 무엇일가
순서가 있는 자료형
ex) for i in 시퀀스자료형 <== 문자열, 리스트, 튜플, 딕셔너리, range객체, etc
그러면 이터레이터객체(iterable object)는 어떻게 for문 안에서 동작할수 있을까?
이터레이터 생성방법
__iter__ 와 __next__
#1.이터러블객체
#문자열, 리스트, 튜플, 딕셔너리,range객체 etc
for i in "123":
print(i)
1
2
3
for i in [10,20,30]:
print(i)
10
20
30
print(type([10,20,30].__iter__))
#<class 'method-wrapper'>
#.__iter__()
iter_obj = [10,20,30].__iter__()
#iterater 객체를 만들어주는 메서드이다.
print(iter_obj)
<list_iterator object at 0x0000021F16C563E0> #iterable 객체생성
for i in iter_obj:
print(i)
10
20
30
#iterable 객체 안에는 __next__라는 메서드가 구현되어있다.
iter_obj = [10,20,30].__iter__()
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
10
20
30
#__iter__()를 통해 iterable객체를 만들고
#__next__()를 호출해서 데이터를 하나씩 출력한다.
__iter__ 와 __next__
#이터레이터 생성방법
class Month:
def __init__(self):
self.month_list = ["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]
self.idx = 0
self.max_num = 12
#__iter__메서드를 호출했을때 객체 자기자신을 반환하면된다,
def __iter__(self):
return self
def __next__(self):
if self.idx < self.max_num:
curr_idx = self.idx #idx값은 변화하므로 임시로 담아둘 변수를 만든다.
self.idx += 1
return self.month_list[curr_idx]
else:
raise StopIteration
for i in Month():
print(i)
1월
2월
3월
4월
5월
6월
5월
6월
7월
8월
9월
10월
11월
12월
iter_obj = Month().__iter__()
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
print(iter_obj.__next__())
1월
2월
3월
4월
5월
6월
5월
6월
7월
8월
9월
10월
11월
12월