我如何找到Python函数的参数个数? [英] How can I find the number of arguments of a Python function?
问题描述
如何找到Python函数的参数数量?我需要知道它有多少个正常参数以及多少个命名参数。
示例:
def someMethod(self,arg1,kwarg1 = None):
pass
这个方法有2个参数和1个命名参数。
以前接受的答案是 弃用 通过 现在,您可以快速查看其参数 或者您还可以通过 另外,您可以在<$ c上调用 Signature
类,而不是使用 inspect.getargspec
。
签名
功能:
从检查导入签名
def someMethod(self,arg1,kwarg1 = None):
pass
$ b $ sig =签名(someMethod)
str
:
str(sig)#返回:'(self,arg1,kwarg1 = None)'
sig.parameters $ c $获取属性名称与参数对象的映射C>。
params = sig.parameters
print(params ['kwarg1'])#prints:kwarg1 = 20
len
$ c> sig.parameters 也可以看到这个函数需要的参数个数:
print( len(params))#3
params
mapping实际上是一个 参数
kwarg1 = params ['kwarg1']
kwarg1.default#返回:无
类似地,包含在参数
。
至于Python 2。 x
用户,而 inspect.getargspec
不被使用,该语言很快就会变成:-)。 Signature
类在 2.x
系列中不可用,不会有。因此,您仍然需要使用 inspect.getargspec
。
至于Python 2和Python 3之间的转换,如果您的代码依赖于 Python 2中的getargspec
并且在 3
中切换到签名
太困难了,您确实有宝贵的选择使用 inspect.getfullargspec
。它提供了一个与 getargspec
(一个可调用参数)相似的接口,以便获取函数的参数,同时还处理 getargspec
不会:
from inspect import getfullargspec
def someMethod(self ,arg1,kwarg1 = None):
pass
args = getfullargspec(someMethod)
与 getargspec
一样, getfullargspec
返回一个 NamedTuple $ c
print(args)
pre>
FullArgSpec(args = ['self',' arg1','kwarg1'],varargs = None,varkw = None,defaults =(None,),kwonlyargs = [],kwonlydefaults = None,annotations = {})
How can I find the number of arguments of a Python function? I need to know how many normal arguments it has and how many named arguments.
Example:
def someMethod(self, arg1, kwarg1=None): pass
This method has 2 arguments and 1 named argument.
解决方案The previously accepted answer has been deprecated as of
Python 3.0
. Instead of usinginspect.getargspec
you should now opt for theSignature
class which superseded it.Creating a Signature for the function is easy via the
signature
function:from inspect import signature def someMethod(self, arg1, kwarg1=None): pass sig = signature(someMethod)
Now, you can either view its parameters quickly by
str
ing it:str(sig) # returns: '(self, arg1, kwarg1=None)'
or you can also get a mapping of attribute names to parameter objects via
sig.parameters
.params = sig.parameters print(params['kwarg1']) # prints: kwarg1=20
Additionally, you can call
len
onsig.parameters
to also see the number of arguments this function requires:print(len(params)) # 3
Each entry in the
params
mapping is actually aParameter
object that has further attributes making your life easier. For example, grabbing a parameter and viewing its default value is now easily performed with:kwarg1 = params['kwarg1'] kwarg1.default # returns: None
similarly for the rest of the objects contained in
parameters
.
As for Python
2.x
users, whileinspect.getargspec
isn't deprecated, the language will soon be :-). TheSignature
class isn't available in the2.x
series and won't be. So you still need to work withinspect.getargspec
.As for transitioning between Python 2 and 3, if you have code that relies on the interface of
getargspec
in Python 2 and switching tosignature
in3
is too difficult, you do have the valuable option of usinginspect.getfullargspec
. It offers a similar interface togetargspec
(a single callable argument) in order to grab the arguments of a function while also handling some additional cases thatgetargspec
doesn't:from inspect import getfullargspec def someMethod(self, arg1, kwarg1=None): pass args = getfullargspec(someMethod)
As with
getargspec
,getfullargspec
returns aNamedTuple
which contains the arguments.print(args) FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
这篇关于我如何找到Python函数的参数个数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!