IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comportement des iterateurs Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 26
    Par défaut Comportement des iterateurs Python
    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

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par JacekB Voir le message
    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 ?
    L'appel a __getitem__ s'arrête à cause de l'IndexError remonté par votre test d'inégalité un peu "weak" ("<=", essayez avec "<").

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 26
    Par défaut Oups....
    En effet, j'avais pas vu l'effet de bord sur x[7]..... Merci !!!

Discussions similaires

  1. [Python 2.X] Envois d'email comportant des accents avec python
    Par tolliob dans le forum Général Python
    Réponses: 6
    Dernier message: 13/08/2015, 08h13
  2. [Coldfusion] Problème de comportement des *.cfm
    Par DarkOcean dans le forum Coldfusion
    Réponses: 7
    Dernier message: 21/06/2006, 18h52
  3. [VCL] Comportement des composants TUpDown
    Par zax-tfh dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/03/2005, 13h42
  4. question sur le comportement des threads
    Par rose-bonbon dans le forum CORBA
    Réponses: 4
    Dernier message: 27/10/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo