如何在Python的另一个函数中找出特定函数的自变量的默认值?


问题内容

假设我们有一个像这样的函数:

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

我们可以使用自省来找出myFunction()使用using的参数的名称myFunction.func_code.co_varnames,但是如何找出默认值arg1'a default value'在上面的示例中)呢?


问题答案:

除了扎根于函数的属性之外,还可以使用inspect模块提供一个稍微友好的界面:

对于Python 3.x解释器:

import inspect
spec = inspect.getfullargspec(myFunction)

然后spec是一个FullArgSpec具有诸如args和属性的对象defaults

FullArgSpec(args=['arg1'], varargs=None, varkw=None, defaults=('a default value',), kwonlyargs=[], kwonlydefaults=None, annotations={})

这些属性中的某些属性在Python
2上不可用,因此如果您必须使用旧版本,inspect.getargspec(myFunction)则将获得不具有Python
3功能的相似值(getargspec也可在Python 3上使用,但自Python 3.0起已弃用,因此请不要使用它) :

import inspect
spec = inspect.getargspec(myFunction)

然后spec是一个ArgSpec具有诸如args和属性的对象defaults

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