如何将列表的所有元素作为函数的参数传递而不将列表作为参数传递
Posted
技术标签:
【中文标题】如何将列表的所有元素作为函数的参数传递而不将列表作为参数传递【英文标题】:How to pass all element of a list as parameter of a function without passing the list as argument 【发布时间】:2022-01-02 00:04:59 【问题描述】:这是一个例子:
def testB(argA, argB):
#USER CODE
def testA(argA, argB, argC):
#USER CODE
def funcExecuter(func, nbArgs, *argv):
#TODO
funcExecuter(testA, 3, 1, 2, 3)
funcExecuter(testB, 2, 1, 2)
我想实现一个函数(这里是 funcExecuter),它使用 argv 中的参数执行函数 func。那些函数有未定义数量的参数。 但我不能打电话
func(*argv)
导致实际函数testA,需要三个参数不是一个。 所以我需要使用 argv list 来调用函数 func 及其所有参数。
这可能吗? 最好的问候。
【问题讨论】:
【参考方案1】:看起来你做的是正确的方法。
例子:
def testB(argA, argB):
print(f'argA=')
print(f'argB=')
def testA(argA, argB, argC):
print(f'argA=')
print(f'argB=')
print(f'argC=')
def funcExecuter(func, nbArgs, *argv):
return func(*argv)
print('test1')
funcExecuter(testA, 3, 'a', 'b', 'c')
print('test2')
funcExecuter(testB, 2, 'a', 'b')
输出:
test1
argA='a'
argB='b'
argC='c'
test2
argA='a'
argB='b'
确保参数数量正确
如果要截断或填充参数:
def testA(argA, argB, argC):
print(f'argA=')
print(f'argB=')
print(f'argC=')
def funcExecuter(func, nbArgs, *argv):
return func(*(list(argv[:nbArgs])+[None]*(nbArgs-len(argv))))
print('test1')
funcExecuter(testA, 3, 'a', 'b', 'c')
print('test2')
funcExecuter(testA, 3, 'a', 'b', 'c', 'd')
print('test3')
funcExecuter(testA, 3, 'a', 'b')
输出:
test1
argA='a'
argB='b'
argC='c'
test2
argA='a'
argB='b'
argC='c'
test3
argA='a'
argB='b'
argC=None
注意。这是一个简单的例子,当然你可以有更复杂的检查
【讨论】:
【参考方案2】:你为什么不使用func(*argv)
,如果它们传递的参数少于 3 个就抛出异常?
【讨论】:
以上是关于如何将列表的所有元素作为函数的参数传递而不将列表作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章