如何在不将列表作为参数传递的情况下将列表的所有元素作为函数的参数传递

How to pass all element of a list as parameter of a function without passing the list as argument

这是例子:

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 及其所有参数。

这可能吗? 最好的问候。

你为什么不使用 func(*argv) 并在它们传递的参数少于 3 个时抛出异常?

看来你的做法是正确的。

示例:

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

注意。这里是一个简单的例子,当然你可以有更复杂的检查