我如何才能找到一个Python函数的参数的数量?我需要知道它有多少普通参数和多少命名参数。
例子:
def someMethod(self, arg1, kwarg1=None):
pass
这个方法有2个参数和1个命名参数。
我如何才能找到一个Python函数的参数的数量?我需要知道它有多少普通参数和多少命名参数。
例子:
def someMethod(self, arg1, kwarg1=None):
pass
这个方法有2个参数和1个命名参数。
当前回答
对于那些想要在Python 2和Python 3.6+之间以可移植的方式做到这一点的人来说,有一个好消息:使用inspect.getfullargspec()方法。它在Python 2中都可以工作。X和3.6+
正如吉姆·法萨拉基斯·希利亚德(Jim Fasarakis Hilliard)等人指出的,过去是这样的: 1. 在Python 2中。X:使用inspect.getargspec() 2. 在Python 3中。X:使用签名,因为getargespec()和getfulllargspec()已弃用。
然而,从Python 3.6开始(根据流行需求?),事情已经朝着更好的方向变化:
从Python 3文档页:
inspect.getfullargspec(函数) 在3.6版更改:此方法以前在Python 3.5中被记录为不赞成signature(),但为了恢复从遗留的getargspec() API迁移的单源Python 2/3代码明确支持的标准接口,该决定已被撤销。
其他回答
对于那些想要在Python 2和Python 3.6+之间以可移植的方式做到这一点的人来说,有一个好消息:使用inspect.getfullargspec()方法。它在Python 2中都可以工作。X和3.6+
正如吉姆·法萨拉基斯·希利亚德(Jim Fasarakis Hilliard)等人指出的,过去是这样的: 1. 在Python 2中。X:使用inspect.getargspec() 2. 在Python 3中。X:使用签名,因为getargespec()和getfulllargspec()已弃用。
然而,从Python 3.6开始(根据流行需求?),事情已经朝着更好的方向变化:
从Python 3文档页:
inspect.getfullargspec(函数) 在3.6版更改:此方法以前在Python 3.5中被记录为不赞成signature(),但为了恢复从遗留的getargspec() API迁移的单源Python 2/3代码明确支持的标准接口,该决定已被撤销。
这是获取函数的强制参数数量的解决方案(*)
如果使用了一些不常见的参数规范(具有默认值的仅限位置参数,没有默认值的仅限关键字参数,等等),那么本文提出的许多解决方案都无法实现这一目的。
from typing import Callable, Any
import inspect
def get_mandatory_argcount(f: Callable[..., Any]) -> int:
"""Get the number of mandatory arguments of a function."""
sig = inspect.signature(f)
def parameter_is_mandatory(p: inspect.Parameter) -> bool:
return p.default is inspect.Parameter.empty and p.kind not in (
inspect.Parameter.VAR_POSITIONAL,
inspect.Parameter.VAR_KEYWORD,
)
return sum(parameter_is_mandatory(p) for p in sig.parameters.values())
# mandatory keyword-only
def f1(b=2, *args, c, d=1, **kwds): pass
print(get_mandatory_argcount(f1))
# positional only with default
def f2(a=1, /, b=3, *args, **kwargs): pass
print(get_mandatory_argcount(f2))
(*)我想把这个作为一个答案,以编程方式确定一个函数所需的参数数量- Python代替,但由于某种原因,这个问题被标记为重复的这个问题,尽管它专门询问所需参数的数量,而这个问题只询问参数的一般数量。
Inspect.getargspec()来满足您的需求
from inspect import getargspec
def func(a, b):
pass
print len(getargspec(func).args)
import inspect
inspect.getargspec(someMethod)
查看inspect模块
inspect.getargspec ()
Get the names and default values of a function’s arguments. A tuple of four things is returned: (args, varargs, varkw, defaults). args is a list of the argument names (it may contain nested lists). varargs and varkw are the names of the * and ** arguments or None. defaults is a tuple of default argument values or None if there are no default arguments; if this tuple has n elements, they correspond to the last n elements listed in args. Changed in version 2.6: Returns a named tuple ArgSpec(args, varargs, keywords, defaults).
看到can-you-list-the-keyword-arguments-a-python-function-receives。