2010-08-19 18 views
25

C'è un modo per ottenere i nomi degli argomenti che una funzione richiede?Nome argomento funzione elenco Python

def foo(bar, buz): 
    pass 

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

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

+3

Forse un altro è giustificato, dal momento che ho passato una buona mezz'ora a provare a Google questo senza colpire quei maledetti. – Bemmu

+1

Questo è il primo successo su Google ora, grazie al modo in cui OP ha posto la domanda. Rendere le risposte più facili da trovare inquadrando meglio la domanda è sicuramente rilevante per UX di coloro che cercano risposte. – episodeyang

risposta

39

utilizzare il metodo inspect dalla libreria standard di Python (il modo più solido pulito per eseguire l'introspezione).

In particolare, inspect.getargspec(f) restituisce i nomi ei valori predefiniti degli argomenti f s' - se desideri solo i nomi e non si cura di forme speciali *a, **k,

import inspect 

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

completamente incontra i tuoi requisiti espressi.

+3

puoi anche usare 'return inspect.getargspec (f) .args' –

+0

@gnibbler, true, in Python 2.6 o solo meglio (quindi ** non ** se stai usando Python con App Engine (o app che incorporano Python 2.5 o prima), ho dato l'approccio che funziona in qualsiasi Python (dal 2.1 quando 'inspect' è stato aggiunto alla libreria standard) –

+0

Impressionante, grazie mille! – 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

Si noti che '.args' funziona solo con Python 2.6 e versioni successive Per le versioni precedenti devi usare' [0] 'invece. – Wolph

+0

+1 per fornire la funzione' magical_way() '. –

Problemi correlati