Ajouter un paramètre dans kwargs lors d'un appel de fonction?
Est-il un moyen pour ajouter de la valeur-clé de la paire dans kwargs lors de l'appel de la fonction?
def f(**kwargs):
print(kwargs)
# ...
pre_defined_kwargs = {'a': 1, 'b': 2}
f(**pre_defined_kwargs, c=3)
Ou même de changer les arguments existants?
f(**pre_defined_kwargs, b=3) # replaces the earlier b=2
Ces deux exemples ne fonctionnent pas, comme ils soulèvent erreur
>>> f(**pre_defined_kwargs, c=3)
SyntaxError: invalid syntax
Pointant à la virgule entre les arguments
source d'informationauteur Markus Meskanen
Vous devez vous connecter pour publier un commentaire.
Pour les versions de Python < 3.5, vous devez placer le
**kwargs
variable argument mot-clé dernier:Voir le Appelle la syntaxe de l'expression; dans toutes les formes de la grammaire de la
"**" expression
règle est placée dernier. En d'autres termes, à l'aide de quoi que ce soit après la**expression
syntaxe est une erreur de syntaxe.Si vous souhaitez mettre à jour le dictionnaire avec de nouvelles valeurs, vous pouvez utiliser le
dict()
appelable; il permet de créer une copie de votre dictionnaire et touches de mise à jour en ce que, à condition que les touches sont aussi valables identifiants Python (commencer par une lettre ou un trait de soulignement, et ne contenir que des lettres, des chiffres et des caractères de soulignement):Ici
b=42
définit un nouveau de la valeur pour l''b'
clé. Cette même syntaxe peut être utilisée pour ajouter des touches de trop, bien sûr.Vous ne pouvez pas utiliser la même clé à la fois dans le
**expression
de cartographie et de façon explicite; que vais poser uneTypeError
. Encore une fois, à partir de la documentation déjà lié:Démo:
Cette restriction a été levée, comme de Python 3.5 (grâce à PEP-448 -- Supplémentaires Déballage des Généralisations; vous pouvez maintenant librement mélanger l'ordre des types d'arguments et d'utiliser de multiples
**mapping
références dans un appel (à l'aide distinctes mappings). Les mots clés doivent encore être unique à travers tous les arguments appliquée; vous ne pouvez toujours pas de "remplacement" des arguments qui apparaissent plus d'une fois.