程序matically 确定函数所需参数的数量 - Python

39 投票
6 回答
33367 浏览
提问于 2025-04-15 11:06

我在创建一个简单的命令行工具,使用字典来模拟一种类似于“选择语句”的功能,字典里的关键词对应着各自的函数。每个函数需要的参数数量都不一样,所以我现在的做法是把每个函数所需的参数数量放在字典里,格式是 {关键词:(函数名, 参数数量)}

这种设置目前运行得很好,不过我在想,是否有办法自动获取一个函数所需的参数数量。我在谷歌上查找了一些资料,但没有找到有用的信息。我意识到,使用 *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

inspect.getargspec():

这个函数可以用来获取一个函数的参数名称和默认值。它会返回一个包含四个部分的元组: (args, varargs, varkw, defaults)。其中,args 是一个参数名称的列表(可能会包含嵌套的列表)。varargs 和 varkw 分别是 * 和 ** 参数的名称,或者是 None。defaults 是一个默认参数值的元组,如果没有默认参数,它就是 None;如果这个元组有 n 个元素,那它们对应的就是 args 列表中最后 n 个参数。

撰写回答