访问Python中的默认参数值
我想知道怎么在Python中以编程的方式获取一个方法的默认参数值。比如,在下面的代码中
def test(arg1='Foo'):
pass
我怎么才能获取到字符串 'Foo'
,也就是在 test
这个方法里的默认值呢?
4 个回答
2
Ricardo Cárdenes的思路是对的。不过,要在函数test
里面真正调用到test
这个函数,会比较复杂。使用inspect
模块可以帮你更进一步,但过程会有点麻烦:Python代码获取当前函数到变量中?
实际上,你可以在这个函数里面引用test
:
def test(arg1='foo'):
print test.__defaults__[0]
这会打印出foo
。不过,引用test
只有在test
确实被定义的情况下才有效:
>>> 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
所以,如果你打算把这个函数传来传去,你可能真的需要使用inspect
这个方法 :(
5
考虑一下:
def test(arg1='Foo'):
pass
In [48]: test.func_defaults
Out[48]: ('Foo',)
.func_defaults
可以让你看到函数参数的默认值,这些默认值会按照你在代码中写的参数顺序排列。
显然,func_defaults
可能在 Python 3 中被移除了。
17
在Python 2中,默认参数被存储在 test.func_defaults
里,而在Python 3中,它们则存储在 test.__defaults__
里。
正如@Friedrich提到的,Python 3还引入了“仅限关键字”的参数,对于这些参数,默认值存储在 function.__kwdefaults__
里。