2011-02-01 19 views
7

Supponiamo di avere una funzione come questa:Come scoprire i valori predefiniti dell'argomento di una particolare funzione in un'altra funzione in Python?

def myFunction(arg1='a default value'): 
    pass 

Possiamo usare l'introspezione per scoprire i nomi degli argomenti che myFunction() prende usando myFunction.func_code.co_varnames, ma come scoprire il valore di default di arg1 (che è 'a default value' nell'esempio sopra)?

+0

Posso rendere questo un Wiki, invece? Non riesco a scoprire come si fa. Ho trovato la risposta poco dopo aver fatto la domanda, quindi da quando ho risposto alla mia domanda, è meglio che io la renda un wiki. – Srikanth

+0

@Josh: Grazie. Ho ottenuto una risposta molto migliore da Duncan e ho contrassegnato quella come la risposta accettata. – Srikanth

risposta

9

Come un'alternativa al rooting around negli attributi della funzione è possibile utilizzare il modulo inspect per un po 'più amichevole Interfaccia:

import inspect 
spec = inspect.getargspec(myFunction) 

Poi specifica è un oggetto ArgSpec con attributi quali args e defaults:

ArgSpec(args=['arg1'], varargs=None, keywords=None, defaults=('a default value',)) 
+2

È molto meglio perché ottieni anche i nomi delle variabili e i loro valori predefiniti (se presenti)! –

0

Il mio male. Naturalmente, c'è myFunction.func_defaults.

7

Se si definisce una funzione f come questo:

>>> def f(a=1, b=True, c="foo"): 
...  pass 
... 

in Python 2, è possibile utilizzare:

>>> f.func_defaults 
(1, True, 'foo') 
>>> help(f) 
Help on function f in module __main__: 
f(a=1, b=True, c='foo') 

mentre in Python 3, è:

>>> f.__defaults__ 
(1, True, 'foo') 
>>> help(f) 
Help on function f in module __main__: 
f(a=1, b=True, c='foo') 
+2

Controlla la risposta di Duncan, è molto meglio di questa. –

Problemi correlati