程序matically 确定函数所需参数的数量 - Python
我在创建一个简单的命令行工具,使用字典来模拟一种类似于“选择语句”的功能,字典里的关键词对应着各自的函数。每个函数需要的参数数量都不一样,所以我现在的做法是把每个函数所需的参数数量放在字典里,格式是 {关键词:(函数名, 参数数量)}
。
这种设置目前运行得很好,不过我在想,是否有办法自动获取一个函数所需的参数数量。我在谷歌上查找了一些资料,但没有找到有用的信息。我意识到,使用 *args 和 **kwargs 可能会让这个命令变得复杂,因为它们允许传入无限数量的参数。
6 个回答
4
在Python 3中,可以用 someMethod.__code__.co_argcount
来查看一个方法的参数数量。
(因为 someMethod.func_code.co_argcount
已经不再适用了)
19
你想要的事情一般来说是做不到的,因为使用了可变参数和关键字参数。不过,inspect.getargspec
(在Python 2.x中)和inspect.getfullargspec
(在Python 3.x中)可以做到类似的功能。
Python 2.x:
>>> import inspect >>> def add(a, b=0): ... return a + b ... >>> inspect.getargspec(add) (['a', 'b'], None, None, (0,)) >>> len(inspect.getargspec(add)[0]) 2
Python 3.x:
>>> import inspect >>> def add(a, b=0): ... return a + b ... >>> inspect.getfullargspec(add) FullArgSpec(args=['a', 'b'], varargs=None, varkw=None, defaults=(0,), kwonlyargs=[], kwonlydefaults=None, annotations={}) >>> len(inspect.getfullargspec(add).args) 2
48
这个函数可以用来获取一个函数的参数名称和默认值。它会返回一个包含四个部分的元组: (args, varargs, varkw, defaults)。其中,args 是一个参数名称的列表(可能会包含嵌套的列表)。varargs 和 varkw 分别是 * 和 ** 参数的名称,或者是 None。defaults 是一个默认参数值的元组,如果没有默认参数,它就是 None;如果这个元组有 n 个元素,那它们对应的就是 args 列表中最后 n 个参数。