截至Python 3.0,之前接受的答案是deprecated。您现在应该选择取代它的 Signature 类,而不是使用 inspect.getargspec。
通过signature function 为函数创建签名很容易:
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
现在,您可以通过string 快速查看其参数:
str(sig) # returns: '(self, arg1, kwarg1=None)'
或者您也可以通过sig.parameters 获取属性名称到参数对象的映射。
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
此外,您还可以在 sig.parameters 上调用 len 以查看此函数所需的参数数量:
print(len(params)) # 3
params 映射中的每个条目实际上是一个 Parameter object,它具有使您的生活更轻松的更多属性。例如,现在可以通过以下方式轻松获取参数并查看其默认值:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
parameters 中包含的其余对象也是如此。
对于 Python 2.x 用户,虽然 inspect.getargspec 不 已弃用,但该语言很快就会:-)。 Signature 类在 2.x 系列中不可用,也不会。所以你仍然需要使用inspect.getargspec。
至于在 Python 2 和 3 之间转换,如果你的代码依赖于 Python 2 中的 getargspec 接口,而在 3 中切换到 signature 太难了,你确实有使用inspect.getfullargspec 的选项。它提供了与getargspec(单个可调用参数)类似的接口,以便获取函数的参数,同时处理getargspec 没有的一些其他情况:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
与getargspec 一样,getfullargspec 返回一个包含参数的NamedTuple。
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})