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 :

Syntaxe pour namedtuples


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Syntaxe pour namedtuples
    Bonjour
    Dans toutes les docs que j'ai pu trouver, la création d'un namedtuple se fait suivant la syntaxe de la ligne 2 du code suivant :
    l'identificateur à gauche du signe "=" est identique au premier paramètre de la fonction namedtuple().
    Pourtant, la ligne 5 ne provoque pas d'erreur.
    D'où ma question : quel est le rôle du premier argument de cette fonction, et pourquoi la totalité des exemples que j'ai pu trouver suivent-ils la première syntaxe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from collections import namedtuple
    Point = namedtuple('Point', ['x', 'y'])
    p = Point(11, 22)
    print(p.x + p.y) #renvoie 33
    Vecteur = namedtuple('Couple', ['x', 'y'])
    v = Vecteur(11, 22) #renvoie 33
    print(v.x + v.y)

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Bonjour,

    Le but est de nommer le tuple, car oui un namedtuple, c'est juste un tuple nommé. Plutôt que d'avoir un formatage de la forme (5, 2) on aura Couple(x=5, y=2). C'est plus beau, plus expressif, mais est-ce un besoin ultime dans le monde Python, perso je ne crois pas.

    Voici un exemple testable,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from collections import namedtuple
    vecteur = namedtuple("Couple", ('x', 'y'))
     
    v1 = vecteur._make((1, 2))
    print(repr(v1))
    print(v1._asdict())
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton intervention.
    Ce que je ne comprends pas dans ta réponse, c'est la différence entre Couple et vecteur dans la ligne 2.
    Que désignent ces identificateurs ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Salut,

    Citation Envoyé par badius1 Voir le message
    Pourtant, la ligne 5 ne provoque pas d'erreur.
    D'où ma question : quel est le rôle du premier argument de cette fonction, et pourquoi la totalité des exemples que j'ai pu trouver suivent-ils la première syntaxe ?
    namedtuple est une fonction qui fabrique dynamiquement une classe. Elle a donc besoin d'un "nom" pour fabriquer cette classe là. Mais pas obligé d'assigner à une variable de même nom ce que retourne la fonction.

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

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par badius1 Voir le message
    Ce que je ne comprends pas dans ta réponse, c'est la différence entre Couple et vecteur dans la ligne 2.
    Que désignent ces identificateurs ?
    vecteur est un générateur de namedtuple de type "Couple" (on peut assimiler "Couple" à un objet)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from collections import namedtuple
    vecteur = namedtuple("Couple", ('x', 'y'))
     
    v1 = vecteur._make((1, 2))
    print(v1)
    print(v1[0])
    print(v1[1])

    Oui, moi aussi le namedtuple je m'y suis frotté sans vraiment piger son réel avantage...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Ce que je ne comprends pas dans ta réponse, c'est la différence entre Couple et vecteur dans la ligne 2.
    Le nom de votre variable et le nom que vous donner à votre tuple ne dépend que de vous et de la manière dont vous voyez le contexte.

    Si je nomme mon tuple Couple, alors logiquement (en ce qui me concerne) je vais donner ce même nom à ma variable.
    C'est à vous de voir, mais si vous considérez que Couple et vecteur représente le même objet, et que vous y retrouvez vos petits en fin de projet, ça ne pose pas de problème, mais si vous ne savez plus, c'est que vous avez manquez de cohérence dans les noms que vous donnez.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Syntaxe pour tester un recordset
    Par mael94420 dans le forum ASP
    Réponses: 5
    Dernier message: 21/06/2005, 13h17
  2. syntaxe pour compilation conditionnelle ?
    Par tintin72 dans le forum C
    Réponses: 9
    Dernier message: 17/05/2005, 19h12
  3. [analyse de syntaxe] pour C et C++ sur Linux
    Par Madmac dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/07/2004, 07h37
  4. [windows] recherche outils coloration syntax. pour -> htm
    Par hpfx dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 02/10/2003, 02h52
  5. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 16h51

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