在python中,如何将列表的每个值作为变量长度参数分别传递给函数?

在python中,如何将列表的每个值作为变量长度参数分别传递给函数?,python,python-3.x,Python,Python 3.x,我希望在接受可变长度参数(*args)的函数中,将列表的每个值作为单独的参数传递 当我直接传递每个参数时,它工作正常,但当我将每个参数作为列表的单独值传递时,它不会给出预期的结果 比如说, def foo(否,*值): 值=列表(值) 对于范围(0,len(值))中的i: 值[i]=值[i]*否 返回(值) 印刷品(foo(5,6,7,8,9,10)) 这很好,并为我提供了以下预期输出: [30, 35, 40, 45, 50] 但这并不是: def foo(否,*值): 值=列表(值) 对

我希望在接受可变长度参数(*args)的函数中,将列表的每个值作为单独的参数传递

当我直接传递每个参数时,它工作正常,但当我将每个参数作为列表的单独值传递时,它不会给出预期的结果

比如说,

def foo(否,*值):
值=列表(值)
对于范围(0,len(值))中的i:
值[i]=值[i]*否
返回(值)
印刷品(foo(5,6,7,8,9,10))
这很好,并为我提供了以下预期输出:

[30, 35, 40, 45, 50]
但这并不是:

def foo(否,*值):
值=列表(值)
对于范围(0,len(值))中的i:
值[i]=值[i]*否
返回(值)
h=[6,7,8,9,10]
打印(foo(5,[i代表h中的i]))
这将生成以下输出: 实际结果:

[[6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10]]
预期结果:

[30, 35, 40, 45, 50]

您可以使用
*
解压列表:

def myfunc(否,*值):
...
arr=[1,2,3,4]
myfunc(5,*arr)#>>myfunc(5,1,2,3,4)

因为
[i for i in h]
正在返回一个列表:
[6,7,8,9,10]

将一个列表相乘,实际上就是将列表的内容附加到它本身

要获得预期的输出,您必须只为函数提供列表的内容,因此您可以通过
foo(5,*[i for i in h])
foo(5,*h)
调用它


但是,
foo(5,*[i代表h中的i])
是非常不必要的。

调用函数时,您可以使用
*
运算符,该运算符将解压列表:

def foo(否,*值):
返回[映射(lambda i:no*i,值)]
foo(5,*[i代表[6,7,8,9,10]中的i])
#将返回[30,35,40,45,50]

在pep-3132中,您可以找到iterable unpacking的所有用例:

请不要像这里一样修复OP的代码:它可能是问题的主要问题,您将其变得无关紧要,因为我无法在另一个问题上提示您。