Comportement des iterateurs Python
Bonjour,
Petite devinette sur laquelle personnellement je seche et n'arrive pas a comprendre le comportement de Python:
Code:
1 2 3 4 5 6 7 8 9
|
>>> class Semaine():
... def __init__(self):
... self.jours = ['lun', 'mar', 'mer', 'jeu', 'ven', 'sam', 'dim']
... def __getitem__(self, index):
... return self.jours[index]
>>> x=Semai
>>> list(x)
['lun', 'mar', 'mer', 'jeu', 'ven', 'sam', 'dim'] |
Jusque la, tout va bien. La methode __iter__ n'est pas definie, mais on itere avec la methode __getitem__ jusqu'a obtenir une exception StopIteration.
En revanche:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
>>> class Semaine():
... def __init__(self):
... self.jours = ['lun', 'mar', 'mer', 'jeu', 'ven', 'sam', 'dim']
... def __getitem__(self, index):
... if index <= len(self.jours):
... return self.jours[index]
... else:
... return 'oups'
>>> x=Semaine()
>>> x[99]
'oups'
>>> list(x)
['lun', 'mar', 'mer', 'jeu', 'ven', 'sam', 'dim'] |
Personnellement, je m'attendais a obtenir une liste infinie, vu que la methode __getitem__ ne renverra jamais d'erreur, pourtant ce n'est pas le cas...
Quelqu'un aurait une idee pour expliquer ce comportement ?
Merci d'avance