python-根据函数句柄输入正确数量的变量
我有一个变量列表和一个函数对象,我想根据函数分配正确数量的变量python-根据函数句柄输入正确数量的变量,python,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个元素调用它。您可以使用默认初始化,您应该记住可以传递到此函数的最大变量数。然后创建一个具有该数量的参数的函数,但用0初始化它们,因为a+0=a(如果缺少某些参
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个元素调用它。您可以使用默认初始化,您应该记住可以传递到此函数的最大变量数。然后创建一个具有该数量的参数的函数,但用0初始化它们,因为
a+0=a
(如果缺少某些参数,它将替换为0
,这不会影响结果。)
def sum2(x,y):
return x + y
def sum3(x,y,z):
return x + y + z
varList = [1,2,3]
但是,如果使用4个以上的参数调用该函数,则会引发错误语句
正如@CoryKramer在评论中所建议的,您还可以将varlist=[1,2,3,4]
作为参数传递:
print sum1(*varlist)
>>> 10
请记住
len(varlist)
应小于定义的参数数量。使用检查
模块如下:
import inspect
n2 = len(inspect.getargspec(sum2)[0])
n3 = len(inspect.getargspec(sum3)[0])
sum2(*varList[0:n2])
sum3(*varList[0:n3])
getargspec
返回一个4元组的(args、varargs、关键字、默认值)
。因此,如果您的所有参数都是显式的,即不是*或**参数,则上述代码可以工作。如果您有一些,请相应地更改代码。您可以检查f是否是带有is
关键字的函数
def sum2(x, y):
return x + y
def sum3(x, y, z):
return x + y + z
varList = [1, 2, 3]
f = sum2
if f is sum2:
sum = f(varList[0], varList[1])
print('Sum 2: ' + str(sum))
# Prints: 'Sum 2: 3'
f = sum3
if f is sum3:
sum = f(varList[0], varList[1], varList[2])
print('Sum 3: ' + str(sum))
# Prints: 'Sum 3: 6'
如果您总是返回所有传递参数的总和,那么这可以在单个函数中完成
def sum1(*args):
return sum(args)
这只是利用位置参数,因为您似乎不需要显式设置单个值。它也比提供的解决方案更灵活,因为您不需要提前知道可以接收的最大参数数
一些例子:
>>> print sum1(1, 2, 3)
6
>>> print sum1(1)
1
>>> print sum1(-1, 0, 6, 10)
15
一般解决办法:
要获取参数的数目,可以使用f.func_code.co_argcount,然后从列表中传递正确的元素:
defsum2(x,y):
返回x+y
def sum3(x、y、z):
返回x+y+z
varlist=[2,5,4]
[sum2,sum3]中f的[f(*varlist[:f.func_code.co_argcount])]
>> [7, 11]
一系列功能:
def two(l):
return l[0] + l[1]
def three(l):
return l[0] * l[1] + l[2]
funcs = {2:two, 3:three}
l = [1, 2, 3]
print len(l)
print funcs[len(l)](l)
你所说的
f=sum2
是什么意思?这两个功能在各个方面都是相同的吗?或者它们是否包含用于相同结果的不同实现?