如何在运行时确定给定函数参数的默认值?

时间:2010-08-25 17:56:27

标签: python

使用python 2.4,我试图在运行时识别哪个任意函数的参数具有默认值。不幸的是,虽然我可以找到默认值,但我似乎无法处理它们对应的参数。例如:

def foo(a, b, c=5):
    return a + b + c

import inspect
inspect.getargspec(foo) # output is: (['a', 'b', 'c'], None, None, (5,))

getargspec的输出在python 2.6中更清晰,它返回一个命名元组:

ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=(5,))

Python显然有足够的信息来执行任务。我怎么能得到它?

2 个答案:

答案 0 :(得分:6)

具有默认值的参数必须遵循没有默认值的参数。 因此,如果存在任何默认值,则它们必须与args尾部的参数相对应。

在您的情况下,args=['a','b','c']defaults=(5,)。因此默认值必须与c对应。

import inspect

def foo(a, b, c=5):
    return a + b + c
def show_defaults(f):
    args, varargs, varkw, defaults = inspect.getargspec(f) 
    if defaults:
        for arg, default in zip(args[-len(defaults):], defaults):
            print('{a} = {d}'.format(a=arg,d=default))

show_defaults(foo)
# c = 5

答案 1 :(得分:3)

documentation开始讨论defaults的价值:

  

如果这个元组有n个元素,那么它们   对应于最后n个元素   在args中列出。

在您的情况下,defaults包含一个值,对应于args中列出的最后一个元素,即c