Accessing the default argument values in Python
They are stored in test.func_defaults
(python 2) and in test.__defaults__
(python 3).
As @Friedrich reminds me, Python 3 has "keyword only" arguments, and for those the defaults are stored in function.__kwdefaults__
Consider:
def test(arg1='Foo'):
pass
In [48]: test.func_defaults
Out[48]: ('Foo',)
.func_defaults
gives you the default values, as a sequence, in order that the arguments appear in your code.
Apparently, func_defaults
may have been removed in python 3.
Ricardo Cárdenes is on the right track. Actually getting to the function test
inside test
is going to be a lot more tricky. The inspect
module will get you further, but it is going to be ugly: Python code to get current function into a variable?
As it turns out, you can refer to test
inside the function:
def test(arg1='foo'):
print test.__defaults__[0]
Will print out foo
. But refering to test
will only work, as long as test
is actually defined:
>>> test()
foo
>>> other = test
>>> other()
foo
>>> del test
>>> other()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in test
NameError: global name 'test' is not defined
So, if you intend on passing this function around, you might really have to go the inspect
route :(