J'étudie Python in a Nutshell, d'Alex Marteli et le livre suggère que tout objet qui a une next()
est (ou du moins peut être utilisée comme) une méthode de itérateur . Il suggère également que la plupart des itérateurs sont construits par des appels implicites ou explicites à une méthode appelée iter
.
Après avoir lu cela dans le livre, j'ai eu envie de l'essayer. J'ai lancé un interpréteur python 2.7.3 et j'ai fait ça :
>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for number in range(0, 10):
... print x.next()
Cependant, le résultat a été le suivant :
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: 'list' object has no attribute 'next'
Dans la confusion, j'ai essayé d'étudier la structure de l'objet x via dir(x)
et j'ai remarqué qu'il y avait un __iter__
objet de la fonction. J'ai donc compris qu'il pouvait être utilisé comme un itérateur, pour autant qu'il supporte ce type d'interface.
Alors quand j'ai réessayé, cette fois-ci légèrement différemment, en essayant de faire ça :
>>> _temp_iter = next(x)
J'ai obtenu cette erreur :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator
Mais comment une liste peut-elle NE PAS être un itérateur, puisqu'elle semble supporter cette interface, et peut certainement être utilisée comme telle dans le contexte suivant :
>>> for number in x:
... print x
Quelqu'un pourrait-il m'aider à clarifier cela dans mon esprit ?