如何找到Python函数的参数数量?我需要知道它有多少个普通参数以及多少个命名参数。
例:
def someMethod(self, arg1, kwarg1=None):
pass
此方法有2个参数和1个命名参数。
早
于接受的答案已于
弃用Python 3.0
。inspect.getargspec
现在,您应该选择Signature
取代它的类,而不是使用它。
创建功能的签名是通过简单的signature
功能:
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
现在,您可以通过以下方式快速查看其参数str
:
str(sig) # returns: '(self, arg1, kwarg1=None)'
或者您也可以通过来获取属性名称到参数对象的映射sig.parameters
。
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
此外,你可以叫len
上sig.parameters
也看到的参数此功能,需要数量:
print(len(params)) # 3
params
映射中的每个条目实际上都是一个具有其他属性的Parameter
对象,使您的生活更加轻松。例如,现在可以轻松地执行以下操作来获取参数并查看其默认值:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
包含在中的其余对象类似parameters
。
对于Python2.x
用户,虽然inspect.getargspec
不建议
弃用,但该语言很快就会成为:-)。该Signature
课程在该2.x
系列中不可用,也不会提供。因此,您仍然需要使用inspect.getargspec
。
至于Python 2和3之间的转换,如果你有一些代码依赖的接口getargspec
在Python 2切换到signature
在3
是太难了,
你必须将有价值的选择
使用inspect.getfullargspec
。它提供了与getargspec
(单个可调用参数)相似的接口,以获取函数的参数,同时还处理某些其他情况,这些getargspec
情况不是:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
与一样getargspec
,getfullargspec
返回NamedTuple
包含参数的。
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
下面是我尝试的代码。我也试图制造任何类型的动物,但没有用。 这可以只用一个函数来完成吗?还是我必须为每个动物子类保留两个分离的“服务”函数?
在通常情况下,定义函数时,函数的参数个数是预先确定的。例如,编写计算两个数相加的函数 add(a, b),代码如下: def add(a, b): return a + b sum = add(1, 2) 在第 1 行,定义了函数 add,函数有两个参数,第 1 个参数是 a,第 2 个参数是 b 在第 2 行,计算参数 a 和 参数 b 的累加和,通过 return 语句将计
问题内容: 以下作品: 垃圾邮件 但是,如果拿来争论呢? TypeError:spam()恰好接受1个参数(给定0) 鉴于我无权访问函数本身,而只能访问代码对象,执行该函数时如何将参数传递给该代码对象?评估可能吗? 编辑:由于大多数读者倾向于不相信这样做的用处,请参见以下用例: 我想将小的Python函数保存到文件中,以便可以从其他计算机上调用它们。(在这里不必说这个用例会严重限制可能的功能。)腌
本文向大家介绍Python如何定义有默认参数的函数,包括了Python如何定义有默认参数的函数的使用技巧和注意事项,需要的朋友参考一下 问题 你想定义一个函数或者方法,它的一个或多个参数是可选的并且有一个默认值。 解决方案 定义一个有可选参数的函数是非常简单的,直接在函数定义中给参数指定一个默认值,并放到参数列表最后就行了。例如: 如果默认参数是一个可修改的容器比如一个列表、集合或者字典,可以使用
问题内容: 我有许多函数结合了位置参数和关键字参数,我想将它们的参数之一绑定到给定值(仅在函数定义之后才知道)。有一般的方法吗? 我的第一次尝试是: 但是,为此,我需要知道传递给的确切args ,并且不能使用单个函数来绑定我感兴趣的所有函数(因为它们具有不同的参数列表)。 问题答案: from functools import partial >>> def f(a, b, c): … print
问题内容: 函数参数中的星号有什么作用? 当我查看pickle模块时,我看到了: 我知道在参数之前(对于可变数量的参数)之前的单星号和双星号,但是在此之前没有。而且我很确定这与泡菜无关。那可能只是这种情况的一个例子。我将其发送给翻译人员时才知道它的名字: 如果重要的话,我使用的是python 3.3.0。 问题答案: 用于强制调用方使用命名参数-因此,如果没有以下关键字参数,则无法将函数定义为参数