Comment lire un itérable sans la boucle for en Python

Vous voulez traiter les éléments dans un objet itérable, mais pour une raison quelconque, vous ne pouvez pas ou ne voulez pas utiliser un pour boucle for.

Pour consommer/lire manuellement un itérable, utilisez la fonction next() et écrivez votre code pour attraper l’exception StopIteration. Par exemple, cet exemple lit manuellement les lignes d’un fichier:

with open('/etc/passwd') as f:
    try:
        while True:
            ligne = next(f)
            print(ligne, end='')
    except StopIteration:
        pass

Normalement, StopIteration est utilisé pour signaler la fin du processus d’itération. Cependant, si vous utilisez next() manuellement (comme montré), vous pouvez aussi lui demander de retourner une valeur de terminaison, comme None, à la place. Par exemple:

with open('/etc/passwd') as f:
     while True:
         ligne = next(f, None)
         if ligne is None:
             break
         print(ligne, end='')

Dans la plupart des cas, l’instruction for est utilisée pour consommer un itérable. Cependant, de temps en temps, un problème exige un contrôle plus précis du mécanisme d’itération sous-jacent.

Il est donc utile de savoir ce qui se passe réellement. L’exemple interactif suivant illustre la mécanique de base de ce qui se passe pendant l’itération:

>>> elements = [1, 2, 3]

>>> # Obtenir l'itérateur
>>> it = iter(elements)     # Invokes elements.__iter__()

>>> # Exécuter l'itérateur
>>> next(it)             # appelle it.__next__()
1
>>> next(it)
2
>>> next(it)
3

>>> next(it)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>

Le codes dans cette catégories d’articles sur les itérateurs développent les techniques d’itération, et la connaissance du protocole de base itérateur est supposée.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here