2010-08-19 7 views
25

¿Hay alguna manera de obtener los nombres de argumento que toma una función?Nombres de argumento de función de lista de Python

def foo(bar, buz): 
    pass 

magical_way(foo) == ["bar", "buz"] 
+1

duplicado: http://stackoverflow.com/questions/582056/getting-list-of-parameters-inside-python-function, http://stackoverflow.com/questions/218616/getting-method- parameter-names-in-python –

+3

Tal vez se justifique uno más, ya que pasé una buena media hora tratando de Google esto sin golpear a esos incautos. – Bemmu

+1

Este es el primer éxito en Google ahora, gracias a la forma en que OP hizo la pregunta. Hacer las respuestas más fáciles de encontrar al enmarcar mejor la pregunta es definitivamente relevante para la experiencia de usuario de quienes buscan respuestas. – episodeyang

Respuesta

39

utiliza el método inspect de la biblioteca estándar de Python (la, forma más sólida más limpio para realizar la introspección).

Específicamente, inspect.getargspec(f) devuelve los nombres y valores por defecto de argumentos f 's - si solo deseas los nombres y no se preocupan por las formas especiales *a, **k,

import inspect 

def magical_way(f): 
    return inspect.getargspec(f)[0] 

cumple completamente sus requisitos expresados.

+3

también puede usar 'return inspect.getargspec (f) .args' –

+0

@gnibbler, true, en Python 2.6 o superior solamente (entonces ** no ** si está usando Python con App Engine (o aplicaciones que incorporan Python 2.5) o anterior); Di el enfoque que funciona en cualquier Python (desde 2.1 cuando 'inspeccionar' se agregó a la biblioteca estándar). –

+0

Impresionante, muchas gracias! – Bemmu

9
>>> import inspect 
>>> def foo(bar, buz): 
...  pass 
... 
>>> inspect.getargspec(foo) 
ArgSpec(args=['bar', 'buz'], varargs=None, keywords=None, defaults=None) 
>>> def magical_way(func): 
...  return inspect.getargspec(func).args 
... 
>>> magical_way(foo) 
['bar', 'buz'] 
+0

Tenga en cuenta que '.args' solo funciona en Python 2.6 y versiones posteriores. Para las versiones anteriores, debe usar' [0] 'en su lugar. – Wolph

+0

+1 para proporcionar la función' magical_way() '. –

Cuestiones relacionadas