Python - 为什么我的列表在使用varargs(keywordonly)传递给方法时会变成元组

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)

感谢您的任何帮助

mgi*_*son 7

您需要在*操作员调用函数调用中解压缩列表:

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循环进行迭代时,它仅遍历此较大列表中的一个元素(一个元素就是您的值)清单)。

希望这可以帮助!