[Python] iter와 next

반응형
    반응형

    파이썬 내장 함수 iter,next 에 대해 알아보겠습니다.

    그에 앞서 이터레이터에 대해 살짝 설명하고 파이썬으로 구현을 해보겠습니다.

     

    이터레이터(Iterator)

    반복을 이용해 어떤 처리를 수행하는 객체를 이터레이터(Iterator)라고 합니다.

    여기서 파이썬에서 반복을 사용하는 모든 툴을 Iteration Tool/Context라 합니다.

    대표적으로 for, comprehesion, map 등이 있습니다.

    툴만 가지고는 구현이 어렵겠죠? 

    실제 이터레이션을 수행할 공간의 객체를 뜻하는 Iterable Object(file, list, generator,..) 와 수행처리 객체인 Iterator Object(__next__)가 있습니다. Iterable Object는 모든 객체가 다 되는것이 아니고 반복이 가능한 것만 사용할 수 있습니다.  그림과 같은 형태로 수행을 하게 됩니다.

     

    for 문을 예로 들면, for 안에 __next__ 인자가 있어서 Iterable Object인 list 안에서 자동적으로 반복을 수행하게 됩니다.

    L_list = [1,2,3,4,5]
    for index in L_list:   #Automatic iteration
        print(index)       # Obtains iter,calls __next__
    
    1
    2
    3
    4
    5
    

     

    iter, next

    이 과정을 수동으로 할 수 있습니다. 어쩌다가 수동으로 조절을 해야할 경우가 생기긴 하지만 거의 쓰진 않습니다.

    for 문이 어떻게 움직이는지 느낌은 알 수 있을겁니다.

    파이썬의 내장 함수인 iter와 next를 이용합니다.

    iter 는 __iter__ 를 호출하고 next 는 __next__를 호출합니다. 

    L_list = [1,2,3,4,5]
    I = iter(L_list)
    I.__next__()    #__next__() 이용
    >>> 1
    next(I)         # next(I) == I.__next__()
    >>> 2
    next(I)
    >>> 3
    next(I)
    >>> 4
    next(I)
    >>> 5
    next(I)         # StopIteration 발생

    iter를 이용해 이터레이터를 만들고 next로 반복을 수행하도록 요청을 합니다.

    더 이상 가져올 게 없으면 StopIteration이 발생됩니다. 

    StopIteration 오류를 없앤다면 자동화가 가능하겠네요.

    예외처리를 하면 for문과 같은 결과가 나옵니다.

    I = iter(L_list)
    try:
        while True:
            print(next(I))
    except:
        None
        
    1
    2
    3
    4
    5

     

     

     

    댓글

    Designed by JB FACTORY

    ....