2011-02-01 15 views
7

Supongamos que tenemos una función como esta:¿Cómo encontrar los valores por defecto del argumento de una función en particular en otra función en Python?

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

Podemos utilizar la introspección para averiguar los nombres de los argumentos que myFunction() lleva utilizando myFunction.func_code.co_varnames, pero la forma de averiguar el valor por defecto de arg1 (que es 'a default value' en el ejemplo anterior)?

+0

¿Puedo hacer esto una vez Wiki? No puedo averiguar cómo hacerlo. Descubrí la respuesta poco después de hacer la pregunta, así que desde que contesté mi propia pregunta, es mejor que la convierta en una wiki. – Srikanth

+0

@Josh: gracias. Obtuve una respuesta mucho mejor de Duncan, y la marqué como la respuesta aceptada. – Srikanth

Respuesta

9

Como una alternativa para enrutar alrededor de los atributos de la función, puede usar el módulo de inspección para obtener un aspecto ligeramente más amigable Interfaz:

import inspect 
spec = inspect.getargspec(myFunction) 

Entonces especificación es un objeto ArgSpec con atributos tales como args y defaults:

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

¡Eso es mucho mejor porque también obtiene los nombres de las variables así como sus valores predeterminados (si están presentes)! –

0

Mi mal. Por supuesto, está myFunction.func_defaults.

7

Si se define una función f así:

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

en Python 2, puede utilizar:

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

mientras que en Python 3, es:

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

Echa un vistazo a la respuesta de Duncan, es mucho mejor que esta. –

Cuestiones relacionadas