英文文档:
iter(object[, sentinel])
Return un objet itérateur. Le premier argument est interprété très différemment selon la présence du deuxième argument. Sans deuxième argument, l'objet doit être un objet de collection qui prend en charge le protocole d'itération (la méthode iter()), ou il doit prendre en charge le protocole de séquence (la méthode getitem() avec des arguments integer commençant à 0). . S'il ne prend en charge aucun de ces protocoles, TypeError est déclenché. Si le deuxième argument, sentinel, est donné, alors l'objet doit être un objet appelable. L'itérateur créé dans ce cas appellera l'objet sans argument for each appel à sa méthode next() ; si la valeur renvoyée est égale à sentinel, StopIteration sera déclenché, sinon la valeur sera renvoyée.
Une application utile de la deuxième forme de iter() consiste à lire les lignes d'un fichier jusqu'à ce qu'une certaine ligne soit atteinte. L'exemple suivant lit un fichier jusqu'à ce que la méthode readline() renvoie une string vide :
with open('mydata.txt') as fp: for line in iter(fp.readline, ''): process_line(line)
说明:
2.数必须是一个支持可迭代协议(即实现了iter()方法)的集合(字典、集合、不可变集合),或者支持序列协议(即实现了getitem()方法,方法接收一个从0开始的整数参数)的序列(元组、列表、字符串),否则将报错。
>>> a = iter({'A':1,'B':2}) #字典集合 >>> a <dict_keyiterator object at 0x03FB8A50> >>> next(a) 'A' >>> next(a) 'B' >>> next(a) Traceback (most recent call last): File "<pyshell#36>", line 1, in <module> next(a) StopIteration >>> a = iter('abcd') #字符串序列 >>> a <str_iterator object at 0x03FB4FB0> >>> next(a) 'a' >>> next(a) 'b' >>> next(a) 'c' >>> next(a) 'd' >>> next(a) Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> next(a) StopIteration
3.被调用对象。创建的迭代对象,在调用next法的时候会调用这个可被调用对象,当返回值和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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!