significado - paso de parametros python
Pasar argumentos de variables nombradas en python (3)
Digamos que tengo los siguientes métodos:
def methodA(arg, **kwargs):
pass
def methodB(arg, *args, **kwargs):
pass
En el método A, deseo llamar al método B, pasando los kwargs. Sin embargo, parece que si defino methodA
siguiente manera, el segundo argumento se transmitirá como argumentos de posición en lugar de variables nombradas.
def methodA(arg, **kwargs):
methodB("argvalue", kwargs)
¿Cómo me aseguro de que los ** kwargs en el método A pasen como ** kwargs al método B?
Algunos experimentos y pensé en esto:
def methodA (arg, ** kwargs): methodB ("argvalue", ** kwargs)
Parece obvio ahora ...
Pon los asteriscos antes de la variable kwargs. Esto hace que Python pase la variable (que se supone que es un diccionario) como argumentos de palabra clave.
methodB("argvalue", **kwargs)
Como comentario adicional: cuando se usan funciones en lugar de métodos, también se puede usar functools.partial:
import functools
def foo(arg, **kwargs):
...
bar = functools.partial(foo, "argvalue")
La última línea definirá una función "bar" que, cuando se llame, llamará a foo con el primer argumento establecido en "argvalue" y todas las demás funciones que se acaban de transmitir:
bar(5, myarg="value")
llamará
foo("argvalue", 5, myarg="value")
Lamentablemente, eso no funcionará con los métodos.