iter()

2701 단어
전재는 출처를 밝혀야 합니다: @OrcaJ35

iter()


iter(object[, sentinel])
이 함수는iterator 대상을 되돌려주지만,object는sentinel의 전송 여부에 따라 다른 해석을 얻을 수 있습니다.
sentinel에 전송되지 않은 경우 object는 교체 프로토콜 ((__iter__() 방법) 을 지원하는 집합 (collection) 대상이어야 한다.또는 시퀀스 프로토콜을 지원하는 대상 (the __getitem__() method with integer arguments starting at 0 이다.만약 이 두 프로토콜이 모두 Object에 지원되지 않는다면 iter() 은 던져질 것이다. TypeErrorTips: 여기서 언급한 집합 대상은 추상적인 개념일 뿐 Collection 유형을 특별히 가리키는 것이 아니라 __iter__() 방법만 실현하면 iter 함수를 지원할 수 있다.마찬가지로 실현__getitem__()방법만 지원iter 함수.
class ObjcIter:
    def __iter__(self):
        cont = 0
        while cont < 3:
            cont += 1
            yield cont


a_iter1 = iter(ObjcIter())
print(list(a_iter1))


class ObjcGetitem:
    def __getitem__(self, item):
        cont = 0

        while cont <= item:
            cont += 1
            if cont >= 5:
                raise StopIteration()
        return cont


a_iter2 = iter(ObjcGetitem())
print(list(a_iter2))

출력:
[1, 2, 3]
[1, 2, 3, 4]

목록, 모듈, 사전 등은 모두 iter의 매개 변수로 직접 사용할 수 있다.
>>> i = iter([1, 2, 3])
>>> i.next()
1
>>> i.next()
2
>>> i.next()
3
>>> i.next()
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

두 번째 인자인sentinel을 전송했다면, 이 때object는 호출 가능한 대상이어야 합니다.이러한 상황에서 만들어진 교체기는 __next__() 방법을 호출할 때마다 매개 변수 없이object를 호출합니다.만약object의 반환값이sentinel과 같으면 던진다StopIteration.만약 반환 값이 sentinel과 같지 않으면, 이 값을 직접 반환합니다.예를 들면 다음과 같습니다.
class AutoIncrement(object):
    """ , 1"""

    def __init__(self):
        self._count = 0

    def __call__(self):
        self._count += 1
        return self._count


a_iter = AutoIncrement()
for i in iter(a_iter, 3):
    #  a_iter() 5 , StopIteration
    #  
    print(i, end=',')

출력:
1,2,

함수 객체를 직접 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
_count = 0


def func():
    global _count
    _count += 1
    return _count


for i in iter(func, 3):
    print(i, end=",")

출력:
1,2,
iter() 두 번째 파라미터가 있는 사용 장면은 파일의 여러 줄을 한꺼번에 읽을 수 있고 특정한 줄에서 읽기를 멈출 수 있다는 것이다.다음 예는 빈 문자열이 되돌아올 때까지 파일을 계속 읽을 것입니다.
with open('mydata.txt') as fp:
    for line in iter(fp.readline, ''):
        process_line(line)

교체기에 대한 자세한 내용은 Iterator Types 를 참조하십시오.

좋은 웹페이지 즐겨찾기