una significado posicional por paso pasar parametros parametro opcionales lista funciones explicacion está determinado desempaquetado como argumentos argumento python variadic-functions

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.