英文文档:
iter
(object[, sentinel])
Return an object. The first argument is interpreted very differently depending on the presence of the second argument. Without a second argument, object must be a collection object which supports the iteration protocol (the method), or it must support the sequence protocol (the method with integer arguments starting at 0
). If it does not support either of those protocols, is raised. If the second argument, sentinel, is given, then object must be a callable object. The iterator created in this case will call object with no arguments for each call to its method; if the value returned is equal to sentinel, will be raised, otherwise the value will be returned.
One useful application of the second form of is to read lines of a file until a certain line is reached. The following example reads a file until the method returns an empty string:
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>>> next(a)'A'>>> next(a)'B'>>> next(a)Traceback (most recent call last): File " ", line 1, in next(a)StopIteration >>> a = iter('abcd') #字符串序列>>> a >>> next(a)'a'>>> next(a)'b'>>> next(a)'c'>>> next(a)'d'>>> next(a)Traceback (most recent call last): File " ", line 1, in next(a)StopIteration
3. 当第二个参数sentinel提供时,第一个参数必须是一个可被调用对象。创建的迭代对象,在调用__next__方法的时候会调用这个可被调用对象,当返回值和sentinel值相等时,将抛出
# 定义类>>> 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>>> next(a)0>>> next(a)1>>> next(a)2>>> next(a)3>>> next(a) #迭代到4终止Traceback (most recent call last): File " ", line 1, in next(a)StopIteration