Ben d'après mes essais, je ne crois pas...
Ben d'après mes essais, je ne crois pas...
xreadlines ne renvoie pas un nouvelle ligne a chaque appel; xreadlines retourne un itérateur; chaque appel à la méthode next de cet itérateur renvoie une nouvelle ligne:
Mais l'appel a xreadlines est inutile car le type 'file' supporte le protocole d'itérateur: il définit une méthode __iter__ qui est appelée quand on utilise l'objet dans un contexte d'itération; cette méthode retourne simplement l'objet 'file' lui-même (il fait seulement un 'return self'). xreadlines également n'est qu'un 'return self'. Chaque appel à la méthode next retourne la ligne suivante du fichier, jusqu'à ce que l'exception StopIteration soit levée lorsqu'on atteint la fin du fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 >>> f = open('c:\\boot.ini') >>> it = f.xreadlines() >>> it.next() '[boot loader]\n' >>> it.next() 'timeout=30\n'
En fait,est équivalent à:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for x in l: print x
On peut donc utiliser un itérateur en dehors d'une boucle for en appelant soi-même la méthode next (par exemple dans une boucle while comme ci-dessus), mais généralement ça n'a pas beaucoup de sens en dehors de toute boucle...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 it = l.__iter__() # ou bien: it = iter(l) try: while True: x = it.next() print x except StopIteration: pass finally: del it # pour faire propre
A part peut-être:
Mais il y a une boucle cachée dans le 'in' tout de même...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 >>> 'timeout=30\n' in file('c:\\boot.ini') True
Exact, je viens de lire la doc et c'est mentionné que xreadlines n'est là que pour des soucis de compatibilité descendante. Comme tu l'as sousligné, cette méthode devait avoir un usage avant qu'elle soit implémenté directement dans les objets fichiers.
| xreadlines(...)
| xreadlines() -> returns self.
|
| For backward compatibility. File objects now include the performance
| optimizations previously implemented in the xreadlines module.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager