Passer des arguments de variables nommées en python
-
09-06-2019 - |
Question
Disons que j'ai les méthodes suivantes :
def methodA(arg, **kwargs):
pass
def methodB(arg, *args, **kwargs):
pass
Dans la méthode A, je souhaite appeler la méthode B, en transmettant les kwargs.Cependant, il semble que si je définis methodA
comme suit, le deuxième argument sera transmis sous forme d'arguments de position plutôt que de variable nommée.
def methodA(arg, **kwargs):
methodB("argvalue", kwargs)
Comment puis-je m'assurer que les **kwargs de la méthodeA sont transmis en tant que **kwargs à la méthodeB ?
La solution
Mettez les astérisques avant la variable kwargs.Cela oblige Python à transmettre la variable (qui est supposée être un dictionnaire) comme arguments de mot-clé.
methodB("argvalue", **kwargs)
Autres conseils
En aparté:Lorsque vous utilisez des fonctions au lieu de méthodes, vous pouvez également utiliser functools.partial :
import functools
def foo(arg, **kwargs):
...
bar = functools.partial(foo, "argvalue")
La dernière ligne définira une fonction "bar" qui, lorsqu'elle sera appelée, appellera foo avec le premier argument défini sur "argvalue" et toutes les autres fonctions qui viennent d'être transmises :
bar(5, myarg="value")
appellera
foo("argvalue", 5, myarg="value")
Malheureusement, cela ne fonctionnera pas avec les méthodes.
Quelques expérimentations et j'ai compris celui-ci :
def méthodeA(arg, **kwargs) :méthodeB("valeurargument", **kwargs)
Cela semble évident maintenant...