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.