2012-01-21 26 views
35

¿Cómo puedo obtener los nombres de los argumentos y sus valores pasados ​​a un método como un diccionario?Argumentos de Python como diccionario

Quiero especificar los parámetros opcionales y necesarios para una solicitud GET como parte de una API HTTP para construir la URL. No estoy seguro de la mejor manera de hacer este pitónico.

+6

Publique un código para ilustrar, esto podría significar varias cosas (o tal vez solo dos). –

+0

¿Algo como esto? http://stackoverflow.com/a/196997/590177 –

+0

posible duplicado de [¿Puede enumerar los argumentos de palabra clave que recibe una función de Python?] (http://stackoverflow.com/questions/196960/can-you-list-the -keyword-arguments-a-python-function-receives) – Marcin

Respuesta

47

Utilice un único argumento con el prefijo **.

>>> def foo(**args): 
...  print(args) 
... 
>>> foo(a=1, b=2) 
{'a': 1, 'b': 2} 
+3

Y solo para agregar, se usa un * simple para aceptar una cantidad sin nombre de args que no son palabras clave como una lista: * args – jdi

+12

@Marcin: Bueno, tal vez entrego el código con demasiada facilidad, pero esto es el tipo de constructo que personalmente siempre encuentro difícil de buscar cuando aprendo un idioma. –

+0

¿Qué sucede si aún quiero que se proporcionen los posibles argumentos de palabra clave (y valores predeterminados) en la definición de la función? – Vanuan

30

Para no keyworded argumentos, utilizar un solo *, y para ninguna palabra clave argumentos, utilice un **.

Por ejemplo:

argumentos
def test(*args, **kwargs): 
    print args 
    print kwargs 

>>test(1, 2, a=3, b=4) 
(1, 2) 
{'a': 3, 'b': 4} 

no de palabras claves se pueden desempaquetar a una tupla y los argumentos de palabras claves se pueden desempaquetar a un diccionario. Unpacking Argument Lists

+0

El resultado sería: '(1, 2)' '{'a': 3, 'b': 4}'. – Makoto

+0

@Makoto Gracias. –

Cuestiones relacionadas