Bonjour,

Petite devinette sur laquelle personnellement je seche et n'arrive pas a comprendre le comportement de Python:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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