반응형

이터레이터(Iterator)가 무엇인가?

파이썬을 사용하다보면은 흔히 만나는 예제가 있다

for i in range(0,10):
	print(i)

 

위와 같이 range 를 사용해서 값을 하나씩 가져다 오는 구문인데,

이는 파이썬 내부적으로 iterator를 만들어서 하나씩 호출하는 구조를 가진다

 

그렇기에 파이썬을 조금 더 파이썬 답게 사용하기 위해서는 이터레이터에 대해서 알아두면

간지가 조금 더 있어보일것이다 (pythonic하게)

 

 

 

 

이터레이터(Iterator)의 구조 

일단은 iterator (이터레이터)의 구조를 살펴보자

 

list1 = ["안녕","Hello","니하오"]

 

이러한 리스트가 있고,

 

for x in list1 :

    print(x)

 

이 리스타가 for문에서 어떻게 작동하냐면 내부적으로는 next(list1) 이라는 함수로 계속 다음번의 원소를 호출하는 구조를 가진다. 그리고 다음번 원소가 없을때에는 StopIteration이라는 예외가 발생하면서 for문이 종료를 시켜준다.

 

 

 

 

클래스로 이터레이터(Iterator) 만들기 

 

내가 직접 이터레이터를 만들기 위해서는 클래스로 구현을 하여야 한다

클래스에다 __init__()메서드 구현, __iter__() 메서드 구현, __next__()구현 을 하면 해당 클래스를 이터레이터로 사용을 할수가 있다

 

우리가 자주쓰는 Range 함수를 직접 클래스로 만들어서 사용을 해보자

아래와 같이 구현을 하게되면 Range를 사용하지 않아도 우리가 만든 MyRange 클래스로 사용이 가능하다

class MyRange():
    def __init__(self, begin, stop):
        self.current = begin
        self.stop = stop

    def __iter__(self):
        return self

    def __next__(self):
        if self.current < self.stop:
            temp = self.current
            self.current += 1
            return temp
        else:
            raise StopIteration
        

for i in MyRange(1, 5):
    print(i, end=" ")

기존 클래스를 구현하는데에다

__iter__메서드와 __next__메서드를 추가적으로 구현한다고 생각하면 간단하다

반응형

'CS > 파이썬' 카테고리의 다른 글

파이썬 - async io 에 대해서 알아보자  (0) 2022.08.17
동시성과 병렬성에 관한 정리  (0) 2022.08.11

+ Recent posts