我如何才能找到一个Python函数的参数的数量?我需要知道它有多少普通参数和多少命名参数。
例子:
def someMethod(self, arg1, kwarg1=None):
pass
这个方法有2个参数和1个命名参数。
我如何才能找到一个Python函数的参数的数量?我需要知道它有多少普通参数和多少命名参数。
例子:
def someMethod(self, arg1, kwarg1=None):
pass
这个方法有2个参数和1个命名参数。
当前回答
之前接受的答案从Python 3.0开始已弃用。而不是使用inspect。gettarget spec您现在应该选择取代它的Signature类。
通过Signature函数为函数创建一个签名很容易:
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
现在,你可以通过字符串快速查看它的参数:
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对象,它具有进一步的属性,使您的工作更加轻松。例如,抓取一个参数并查看它的默认值现在很容易执行:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
参数中包含的其他对象也是如此。
至于Python 2。X用户,同时检查。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)
与getargespec一样,getfullargspec返回一个包含参数的NamedTuple。
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
其他回答
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。
func.__code__。co_argcount给出了在*args之前任何参数的个数
函数。__kwdefaults__给你一个字典的关键字参数AFTER *args
func.__code__。Co_kwonlyargcount等于len(funct .__kwdefaults__)
函数。__defaults__提供了出现在*args之前的可选参数值
这里有一个简单的例子:
>>> def a(b, c, d, e, f=1, g=3, h=None, *i, j=2, k=3, **L):
pass
>>> a.__code__.co_argcount
7
>>> a.__defaults__
(1, 3, None)
>>> len(a.__defaults__)
3
>>>
>>>
>>> a.__kwdefaults__
{'j': 2, 'k': 3}
>>> len(a.__kwdefaults__)
2
>>> a.__code__.co_kwonlyargcount
2
Inspect.getargspec()来满足您的需求
from inspect import getargspec
def func(a, b):
pass
print len(getargspec(func).args)
someMethod.func_code.co_argcount
或者,如果当前函数名未确定:
import sys
sys._getframe().func_code.co_argcount