正如其他人已经说过的那样,默认值存储在函数对象中。
例如,在CPython中,您可以执行以下操作:
>>> def f(a=[]):... pass...>>> f.func_defaults([],)>>> f.func_pre.co_varnames('a',)>>>但是,
co_varnames可能包含的名称超过了args的名称,因此它需要进一步处理,而其他Python实现中甚至可能没有这些属性。因此,您应该改用该
inspect模块,它会为您处理所有实现细节:
>>> import inspect>>> spec = inspect.getargspec(f)>>> specArgSpec(args=['a'], varargs=None, keywords=None, defaults=([],))>>>
在
ArgSpec一个名为元组这样你就可以访问所有值的属性:
>>> spec.args['a']>>> spec.defaults([],)>>>
如文档所述,
defaults元组始终对应于中的n个最后一个参数
args。这为您提供了映射。
要创建字典,您可以执行以下操作:
>>> dict(zip(spec.args[-len(spec.defaults):], spec.defaults)){'a': []}>>>


