python根据函数hand输入正确的变量数

2024-06-17 13:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个变量列表和一个函数对象,我想根据函数分配正确的变量数。你知道吗

def sum2(x,y):
    return x + y

def sum3(x,y,z):
    return x + y + z

varList = [1,2,3]

所以如果f=sum2,我希望它调用varList的前2个元素,如果f=sum3,用函数的3个元素调用它。你知道吗


Tags: 对象函数元素列表returndefvarlistsum2
3条回答

使用inspect模块如下:

import inspect
n2 = len(inspect.getargspec(sum2)[0])
n3 = len(inspect.getargspec(sum3)[0])
sum2(*varList[0:n2])
sum3(*varList[0:n3])

getargspec返回(args, varargs, keywords, defaults)的4元组。因此,如果所有arg都是显式的,即not*或**args,那么上面的代码就可以工作。如果您有其中一些,请相应地更改代码。你知道吗

如果总是返回所有传递参数的总和,则可以在单个函数中完成此操作。你知道吗

def sum1(*args):
    return sum(args)

这只是利用位置参数,因为您似乎不需要显式设置单个值。它也比ZdaR提供的解决方案更灵活,因为您不需要提前知道可以接收的最大参数数。你知道吗

一些例子:

>>> print sum1(1, 2, 3)
6
>>> print sum1(1)
1
>>> print sum1(-1, 0, 6, 10)
15

可以使用默认初始化,但应记住可以传递给此函数的最大变量数。然后创建一个参数数目为0的函数,因为a+0 = a(如果缺少某些参数,它将替换为0,这不会影响结果)

def sum1(a=0, b=0, c=0, d=0):
    return a+b+c+d

print sum1(1)
>>> 1

print sum1(1, 2)
>>> 3

print sum1(1, 2, 3)
>>> 6

print sum1(1, 2, 3, 4)
>>> 10

但是,如果使用4个以上的参数调用函数,则会引发错误语句

正如@CoryKramer在注释中所建议的,您还可以将varlist = [1, 2, 3, 4]作为参数传递:

print sum1(*varlist)
>>> 10

请记住,len(varlist)应该小于定义的参数数。你知道吗

相关问题 更多 >