Python 심화21 - 이터레이터

do yeon kim·2022년 6월 8일
0

Python(심화)_fastcampus

목록 보기
22/24

이터레이터객체(iterable object)

이터러블객체란 무엇일가
순서가 있는 자료형

ex) for i in 시퀀스자료형 <== 문자열, 리스트, 튜플, 딕셔너리, range객체, etc

그러면 이터레이터객체(iterable object)는 어떻게 for문 안에서 동작할수 있을까?


이터레이터 생성방법

  • 이터레이터 클래스를 정의해준다.
  • iter메서드를 정의해준다.
  • next메서드를 정의해준다.

__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)
12345656789101112월

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__())

12345656789101112

https://fastcampus.co.kr/dev_online_pyweb

0개의 댓글