python 3.6.8 strong> i Obtenir la sortie suivante: strong> p> Python 3.6.8 (default, Dec 29 2018, 10:04:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.1.1 -- An enhanced Interactive Python. Type '?' for help.
Out[1]: None {'test': 1, 'sim': 0.2}
3 Réponses :
Ma fonction est par conception devrait accepter uniquement des arguments de type mot-clé, c'est-à-dire non * args p>
Utilisez
* code> pour le dire explicitement, vous obtiendrez votre sortie souhaitée: p>xxx pré>
def foo (test = 1) code> fait pas strud> marquetest code> un argument mot-clé seulement. Il donne justetest code> une valeur par défaut, maistest code> peut toujours être transmis comme un argument de position, c'est-à-direFOO (2) p>. P>. blockQuote>
Donc, si elles peuvent être transmises positionnellement, elles apparaissent dans __ kwdefault __ code> s'applique uniquement aux arguments acceptés uniquement em> par mot-clé; par the Docs :
__ par défaut __ code> - tuple de toutes les valeurs par défaut pour les paramètres de position ou de mots clés
__ kwdefault __ code> - Mappage de toutes les valeurs par défaut pour les paramètres mot-clé-seulement p>
BlockQuote> __ par défaut __ code>. Si vous souhaitez effectuer les arguments mots clés - uniquement sans accepter des arguments de position, ajoutez un argument vide * code> (Nouveau dans Python 3; Non disponible en Python 2): P> def xx(*, test=1, sim=0.2):
return test + sim
En regardant le Modèle de données Documents , nous voyons que Un dict contenant des valeurs par défaut pour les paramètres mot-clé seulement. p>
BlockQuote> Les arguments mots clés ont été introduits dans PEP3102 . En bref, ils sont un argument qui suit soit donc alors que Une solution de contournement simple serait de les faire par mot-clé uniquement en utilisant si vous devez obtenir les valeurs par défaut d'arguments nommés, vous pouvez également le faire avec le __ kwdefault __ code> est
* args code> ou un clair * code> dans le Liste d'arguments . p> Test code> et SIM code> DEF XX (TEST = 1, SIM = 0.2): CODE> MAI EM> est spécifié par des mots-clés dans une invocation de fonction réelle, ils nommés en fait des arguments de position et non des mots clés. p> * code>: p> Inspect code> < / a> module: p>
Eh bien,
def xx (test = 1, sim = 0,2) code> accepte* code> args.def xx (*, test = 1, sim = 0,2) code> ne sera-t-il pas possible.