访问Python中的默认参数值

8 投票
4 回答
1427 浏览
提问于 2025-04-17 09:56

我想知道怎么在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__ 里。

撰写回答