2024-06-17 13:00:40 发布
网友
我有一个变量列表和一个函数对象,我想根据函数分配正确的变量数。你知道吗
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个元素调用它。你知道吗
使用inspect模块如下:
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,那么上面的代码就可以工作。如果您有其中一些,请相应地更改代码。你知道吗
getargspec
(args, varargs, keywords, defaults)
如果总是返回所有传递参数的总和,则可以在单个函数中完成此操作。你知道吗
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,这不会影响结果)
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]作为参数传递:
varlist = [1, 2, 3, 4]
print sum1(*varlist) >>> 10
请记住,len(varlist)应该小于定义的参数数。你知道吗
len(varlist)
使用
inspect
模块如下:getargspec
返回(args, varargs, keywords, defaults)
的4元组。因此,如果所有arg都是显式的,即not*或**args,那么上面的代码就可以工作。如果您有其中一些,请相应地更改代码。你知道吗如果总是返回所有传递参数的总和,则可以在单个函数中完成此操作。你知道吗
这只是利用位置参数,因为您似乎不需要显式设置单个值。它也比ZdaR提供的解决方案更灵活,因为您不需要提前知道可以接收的最大参数数。你知道吗
一些例子:
可以使用默认初始化,但应记住可以传递给此函数的最大变量数。然后创建一个参数数目为0的函数,因为
a+0 = a
(如果缺少某些参数,它将替换为0
,这不会影响结果)但是,如果使用4个以上的参数调用函数,则会引发错误语句
正如@CoryKramer在注释中所建议的,您还可以将
varlist = [1, 2, 3, 4]
作为参数传递:请记住,
len(varlist)
应该小于定义的参数数。你知道吗相关问题 更多 >
编程相关推荐