> 백엔드 개발 > 파이썬 튜토리얼 > Python 내장 함수 iter

Python 내장 함수 iter

高洛峰
풀어 주다: 2016-11-04 14:52:38
원래의
1360명이 탐색했습니다.

英文文档:

iter(object[, sentinel])

반복자 객체를 반환합니다. 첫 번째 인수는 두 번째 인수의 존재 여부에 따라 매우 다르게 해석됩니다. 두 번째 인수가 없으면 개체는 반복 프로토콜(__iter__() 메서드)을 지원하는 컬렉션 개체이거나 시퀀스 프로토콜(0에서 시작하는 정수 인수가 있는 __getitem__() 메서드)을 지원해야 합니다. 해당 프로토콜 중 하나를 지원하지 않으면 TypeError가 발생합니다. 두 번째 인수인 sentinel이 제공되면 객체는 호출 가능한 객체여야 합니다. 이 경우 생성된 반복자는 __next__() 메소드를 호출할 때마다 인수 없이 객체를 호출합니다. 반환된 값이 sentinel과 같으면 StopIteration이 발생하고, 그렇지 않으면 값이 반환됩니다.

iter()의 두 번째 형식을 유용하게 적용한 한 가지는 특정 줄이 나올 때까지 파일의 줄을 읽는 것입니다. 도달했다. 다음 예에서는 readline() 메소드가 빈 문자열을 반환할 때까지 파일을 읽습니다.

with open('mydata.txt') as fp:    for line in iter(fp.readline, ''):
       process_line(line)

 说明:

  1. 函数功能返回一个可迭代对象。

  2.二个参数不提供时,第一个参数必须是一个支持可迭代协议(即实现了__iter__()방법) 的集合(字典、集合、不可变集合),或者支持序列协议(即实现了__getitem__()방법, 방법법接收一个从0开始的整数参数)的序列(元组、列表、字符串),否则将报错。

>>> a = iter({'A':1,'B':2}) #字典集合
>>> a
<dict_keyiterator object at 0x03FB8A50>
>>> next(a)
&#39;A&#39;
>>> next(a)
&#39;B&#39;
>>> next(a)
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    next(a)
StopIteration
 
>>> a = iter(&#39;abcd&#39;) #字符串序列
>>> a
<str_iterator object at 0x03FB4FB0>
>>> next(a)
&#39;a&#39;
>>> next(a)
&#39;b&#39;
>>> next(a)
&#39;c&#39;
>>> next(a)
&#39;d&#39;
>>> next(a)
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    next(a)
StopIteration
로그인 후 복사

3. 当第二个参数sentinel提供时,第一个参数必须是一个可被调用对象。可被调用对象,当返回值와 sentinel值上等时,将抛出StopIteration异常, 终止迭代。

# 定义类
>>> class IterTest: 
    def __init__(self):
        self.start = 0
        self.end = 10
    def get_next_value(self):
        current = self.start
        if current < self.end:
            self.start += 1
        else:
            raise StopIteration
        return current

>>> iterTest = IterTest() #实例化类
>>> a = iter(iterTest.get_next_value,4) # iterTest.get_next_value为可调用对象,sentinel值为4
>>> a
<callable_iterator object at 0x03078D30>
>>> next(a)
>>> next(a)
>>> next(a)
>>> next(a)
>>> next(a) #迭代到4终止
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    next(a)
StopIteration
로그인 후 복사


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿