2009-10-13 15 views

Respuesta

49

Sólo tiene que utilizar func(**some_dict) llamarlo.

Esto está documentado en section 4.7.4 of python tutorial.

Tenga en cuenta que la misma dict es no pasado a la función. Se crea una nueva copia, por lo que some_dict is not kwargs.

+0

_ "Se ha creado una copia nueva" _ - ¿Dónde encuentro documentación oficial para este comportamiento? – jan

5

func(**mydict)

esto significará kwargs = mydict dentro de la función

todas las llaves del mydict deben ser cadenas

7

No es 100% claro por su pregunta, pero si desea pasar una dict a través de kwargs, que acaba de hacer que dict una parte de otra dict, así:

my_dict = {}      #the dict you want to pass to func 
kwargs = {'my_dict': my_dict } #the keyword argument container 
func(**kwargs)      #calling the function 

A continuación, puede coger my_dict en la función:

def func(**kwargs): 
    my_dict = kwargs.get('my_dict') 

o ...

def func(my_dict, **kwargs): 
    #reference my_dict directly from here 
    my_dict['new_key'] = 1234 

Utilizo mucho este último cuando tengo el mismo conjunto de opciones pasadas a diferentes funciones, pero algunas funciones solo usan algunas de las opciones (espero que tenga sentido ...). Pero hay, por supuesto, un millón de formas de hacerlo. Si elabora un poco sobre su problema, lo más probable es que lo ayudemos mejor.

0

para Python 3.6 ** sólo hay que poner antes de que el nombre del diccionario

def lol(**kwargs): 
    for i in kwargs: 
     print(i) 

my_dict = { 
    "s": 1, 
    "a": 2, 
    "l": 3 
} 

lol(**my_dict) 
Cuestiones relacionadas