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 :

(1 and [a] or [b])[0], quelle utilité ? Y'en a sûrement une..


Sujet :

Python

  1. #21
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Ben d'après mes essais, je ne crois pas...

  2. #22
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Citation Envoyé par yacinechaouche Voir le message
    Quant à la différence entre xreadlines et readline, effectivement c'est la notion d'itérateur : readline retourne une seule ligne, donc boucler sur un readline reviens à boucler sur les caractères de cette ligne, et xreadlines renvoi une nouvelle ligne à chaque appel, donc faire une boucle dessus reviens à faire une boucle sur le fichier.

    Je ne sais pas s'il est possible d'utiliser xreadlines autre part que dans une boucle...
    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:
    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'
    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.

    En fait,est équivalent à:
    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
    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...
    A part peut-être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> 'timeout=30\n' in file('c:\\boot.ini')
    True
    Mais il y a une boucle cachée dans le 'in' tout de même...

  3. #23
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Le multitouch - quelle utilité?
    Par leyee dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 14/05/2009, 19h18
  2. les interfaces; quelle utilité?
    Par noubigh dans le forum C#
    Réponses: 9
    Dernier message: 30/07/2008, 10h18
  3. Site Semi-dynamique quelle utilité ?
    Par ljp200250 dans le forum WebDev
    Réponses: 1
    Dernier message: 17/07/2008, 20h58
  4. (adodbconnection) quelles utilité?
    Par doogybreton dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/01/2008, 13h24
  5. [DataWareHouse] Quelle utilité des clés de substitution ?
    Par alpachico dans le forum Alimentation
    Réponses: 3
    Dernier message: 23/03/2006, 14h41

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