Maison > développement back-end > Tutoriel Python > Introduction détaillée à la fonction iter intégrée de Python

Introduction détaillée à la fonction iter intégrée de Python

高洛峰
Libérer: 2017-03-21 09:25:20
original
2298 Les gens l'ont consulté

英文文档:

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)
Copier après la connexion

说明:

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

  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
Copier après la connexion

  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
Copier après la connexion

 

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal