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 :(

Tags:

Python