当前位置: 首页 > 面试题库 >

如何找到Python函数的参数数量?

薛淳
2023-03-14
问题内容

如何找到Python函数的参数数量?我需要知道它有多少个普通参数以及多少个命名参数。

例:

def someMethod(self, arg1, kwarg1=None):
    pass

此方法有2个参数和1个命名参数。


问题答案:


于接受的答案已于
弃用
Python 3.0inspect.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

此外,你可以叫lensig.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切换到signature3是太难了,
你必须将有价值的选择
使用inspect.getfullargspec。它提供了与getargspec(单个可调用参数)相似的接口,以获取函数的参数,同时还处理某些其他情况,这些getargspec情况不是:

from inspect import getfullargspec

def someMethod(self, arg1, kwarg1=None):
    pass

args = getfullargspec(someMethod)

与一样getargspecgetfullargspec返回NamedTuple包含参数的。

print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})


 类似资料:
  • 下面是我尝试的代码。我也试图制造任何类型的动物,但没有用。 这可以只用一个函数来完成吗?还是我必须为每个动物子类保留两个分离的“服务”函数?

  • 问题内容: 以下作品: 垃圾邮件 但是,如果拿来争论呢? TypeError:spam()恰好接受1个参数(给定0) 鉴于我无权访问函数本身,而只能访问代码对象,执行该函数时如何将参数传递给该代码对象?评估可能吗? 编辑:由于大多数读者倾向于不相信这样做的用处,请参见以下用例: 我想将小的Python函数保存到文件中,以便可以从其他计算机上调用它们。(在这里不必说这个用例会严重限制可能的功能。)腌

  • 本文向大家介绍Python如何定义有默认参数的函数,包括了Python如何定义有默认参数的函数的使用技巧和注意事项,需要的朋友参考一下 问题 你想定义一个函数或者方法,它的一个或多个参数是可选的并且有一个默认值。 解决方案 定义一个有可选参数的函数是非常简单的,直接在函数定义中给参数指定一个默认值,并放到参数列表最后就行了。例如: 如果默认参数是一个可修改的容器比如一个列表、集合或者字典,可以使用

  • 在通常情况下,定义函数时,函数的参数个数是预先确定的。例如,编写计算两个数相加的函数 add(a, b),代码如下: def add(a, b): return a + b sum = add(1, 2) 在第 1 行,定义了函数 add,函数有两个参数,第 1 个参数是 a,第 2 个参数是 b 在第 2 行,计算参数 a 和 参数 b 的累加和,通过 return 语句将计

  • 问题内容: 我有许多函数结合了位置参数和关键字参数,我想将它们的参数之一绑定到给定值(仅在函数定义之后才知道)。有一般的方法吗? 我的第一次尝试是: 但是,为此,我需要知道传递给的确切args ,并且不能使用单个函数来绑定我感兴趣的所有函数(因为它们具有不同的参数列表)。 问题答案: from functools import partial >>> def f(a, b, c): … print

  • 问题内容: 函数参数中的星号有什么作用? 当我查看pickle模块时,我看到了: 我知道在参数之前(对于可变数量的参数)之前的单星号和双星号,但是在此之前没有。而且我很确定这与泡菜无关。那可能只是这种情况的一个例子。我将其发送给翻译人员时才知道它的名字: 如果重要的话,我使用的是python 3.3.0。 问题答案: 用于强制调用方使用命名参数-因此,如果没有以下关键字参数,则无法将函数定义为参数