2024-04-27 05:27:24 发布
网友
如何找到Python函数的参数数?我需要知道它有多少正常参数和多少命名参数。
示例:
def someMethod(self, arg1, kwarg1=None): pass
此方法有2个参数和1个命名参数。
先前接受的答案是deprecated,截至Python 3.0。现在应该选择替代它的Signature类,而不是使用inspect.getargspec。
Python 3.0
Signature
inspect.getargspec
通过^{} function很容易为函数创建签名:
from inspect import signature def someMethod(self, arg1, kwarg1=None): pass sig = signature(someMethod)
现在,您可以通过str快速查看其参数:
str
str(sig) # returns: '(self, arg1, kwarg1=None)'
或者还可以通过sig.parameters获得属性名到参数对象的映射。
sig.parameters
params = sig.parameters print(params['kwarg1']) # prints: kwarg1=20
此外,您还可以在sig.parameters上调用len,以查看此函数所需的参数数:
len
print(len(params)) # 3
映射params中的每个条目实际上是一个^{} object,它具有使您的生活更轻松的进一步属性。例如,抓取参数并查看其默认值现在很容易使用:
params
kwarg1 = params['kwarg1'] kwarg1.default # returns: None
对于parameters中包含的其他对象也一样。
parameters
至于Python 2.x用户,虽然inspect.getargspec没有被弃用,但该语言很快就会被:-)。Signature类在2.x系列中不可用,也不会。因此,您仍然需要使用^{}。
2.x
至于Python2和3之间的转换,如果您的代码依赖于Python2中的getargspec接口,而在3中切换到signature则太困难,您确实有使用^{}的宝贵选项。它提供了一个类似于getargspec(单个可调用参数)的接口,以便获取函数的参数,同时还处理getargspec没有的一些附加情况:
getargspec
3
signature
from inspect import getfullargspec def someMethod(self, arg1, kwarg1=None): pass args = getfullargspec(someMethod)
与getargspec一样,getfullargspec返回包含参数的NamedTuple。
getfullargspec
NamedTuple
print(args) FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
import inspect inspect.getargspec(someMethod)
见the inspect module
someMethod.func_code.co_argcount
或者,如果当前函数名未确定:
import sys sys._getframe().func_code.co_argcount
先前接受的答案是deprecated,截至
Python 3.0
。现在应该选择替代它的Signature
类,而不是使用inspect.getargspec
。通过^{} function 很容易为函数创建签名:
现在,您可以通过
str
快速查看其参数:或者还可以通过
sig.parameters
获得属性名到参数对象的映射。此外,您还可以在
sig.parameters
上调用len
,以查看此函数所需的参数数:映射} object ,它具有使您的生活更轻松的进一步属性。例如,抓取参数并查看其默认值现在很容易使用:
params
中的每个条目实际上是一个^{对于
parameters
中包含的其他对象也一样。至于Python} 。
2.x
用户,虽然inspect.getargspec
没有被弃用,但该语言很快就会被:-)。Signature
类在2.x
系列中不可用,也不会。因此,您仍然需要使用^{至于Python2和3之间的转换,如果您的代码依赖于Python2中的} 的宝贵选项。它提供了一个类似于
getargspec
接口,而在3
中切换到signature
则太困难,您确实有使用^{getargspec
(单个可调用参数)的接口,以便获取函数的参数,同时还处理getargspec
没有的一些附加情况:与
getargspec
一样,getfullargspec
返回包含参数的NamedTuple
。见the inspect module
或者,如果当前函数名未确定:
相关问题 更多 >
编程相关推荐