使用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显然有足够的信息来执行任务。我怎么能得到它?
答案 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
。