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 :

__kwdefaults__ comportement inattendu ?


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 7
    Points
    7
    Par défaut __kwdefaults__ comportement inattendu ?
    Bonjour,

    Je tapotais tranquillement la console Python 3.5 quand j'ai fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     >>> def foo(kwarg1="GA", kwarg2="BU", kwarg3="BAZ"):
    ...       pass
     
    >>> print(foo.__kwdefaults__)
    None
    Intrigué j'ai refait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> def foo(arg1, arg2, arg3, *args, kwarg1="FOO", kwarg2="BAR", kwarg3="BAZ"):
    ...     pass
    ...
    >>> print(foo.__kwdefaults__)
    {'kwarg1': 'FOO', 'kwarg3': 'BAZ', 'kwarg2': 'BAR'}
    Sur le coup je n'ai pas compris: pourquoi dans le premier bout de code, l'appel de __kwdefaults__ renvoi None alors que la fonction a bien des keyword arguments ?
    Alors j'ai regardé la doc : __kwdefaults__ doit renvoyer les keywords arguments de la fonction, un point c'est tout.

    Pourquoi cela n'est t-il pas le cas lorsque la fonction ne possède pas d'arguments sans valeurs par défaut ?

    Je n'ai pas la compétence d'aller fouiller les sources de Python mais quelqu’un pourrait t-il m'expliquer ?

    Accessoirement comment pourrais-je faire pour être sur de récupérer tous les arguments de ma fonction dans ce cas ?

    Je vous souhaites une bonne journée.

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

    Citation Envoyé par Negathan Voir le message
    Je n'ai pas la compétence d'aller fouiller les sources de Python mais quelqu’un pourrait t-il m'expliquer ?
    Ce qui provoque la définition de __kwdefault__ est le "*" tel que décrit dans le PEP 3102

    Citation Envoyé par Negathan Voir le message
    Accessoirement comment pourrais-je faire pour être sur de récupérer tous les arguments de ma fonction dans ce cas ?
    Vous avez le module inspect pour çà avec des fonctions comme getargspec ou getfullargspec.

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juin 2014
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Très bien, je vous remercie de votre réponse précise.

    Si je comprend bien, __kwdefaults__ permet de récupérer exclusivement les arguments clefs qui ne peuvent pas être remplacés par des arguments "réguliers". Je dois admettre qu'a mes yeux, cela limite quelques peu l’intérêt de cette méthode mais il est vrai qu'au vu de toutes les subtilités du passage d'arguments en Python ce comportement est effectivement justifié.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. C# et transaction SQL : Comportement inattendu
    Par StringBuilder dans le forum C#
    Réponses: 1
    Dernier message: 29/12/2011, 11h30
  2. Réponses: 4
    Dernier message: 27/12/2010, 11h27
  3. [XSLT]Problème de comportement inattendu
    Par kalimatchoum dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 06/03/2007, 18h33
  4. [PL/SQL][Oracle9] Proc. Stoc. comportement inattendue
    Par Carlito_superheros dans le forum Oracle
    Réponses: 2
    Dernier message: 30/08/2006, 16h13
  5. Comportement inattendu de Firefox
    Par reggae dans le forum Firefox
    Réponses: 3
    Dernier message: 08/05/2006, 21h15

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