Jok*_*ker 2 python variadic-functions python-3.x
我将列表传递给一个接受多个参数(*值)的方法.如果我传递多个由","分隔的值,那么一切都很好,但如果我传递一个列表*值变成一个元组并且不迭代这些值,唯一的元素就是我要迭代的列表.有人可以解释一下吗?有没有办法解决这个问题,两种方式都有效?
我的方法:
def accept(*values):
for value in values:
#do something with value
Run Code Online (Sandbox Code Playgroud)
作品:
foo.accept(value1, value2, value3)
Run Code Online (Sandbox Code Playgroud)
不起作用:
values = [value1, value2, value3]
foo.accept(values)
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助
小智 5
python中的多参数功能的工作方式是,您可以将可变数量的参数传递给函数,并且它将自动将它们转换为列表(因此您不必手动),然后执行函数中的代码。因此,当您执行此操作时foo.accept(value1, value2, value3),它将创建一个列表[value1, value2, value3]并将该列表标记为函数的参数,然后对列表进行代码迭代。但是,当您这样做时
values = [value1, value2, value3]
foo.accept(values)
Run Code Online (Sandbox Code Playgroud)
变量参数(varargs)功能会将您的值列表包装到另一个列表中,因此现在函数的参数为[[value1, value2, value3]]并且当for循环进行迭代时,它仅遍历此较大列表中的一个元素(一个元素就是您的值)清单)。
希望这可以帮助!