将列表传递给函数作为多个参数

284 投票
3 回答
251161 浏览
提问于 2025-04-16 02:46

在一个需要列表作为输入的函数里,我该怎么传递一个Python列表里的单个项目而不出错呢?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

肯定有办法把列表展开,然后直接把 'red','blue','orange' 传给这个函数吧?我觉得这叫做“解包”。

3 个回答

19

从Python 3.5开始,你可以解包任意数量的list

PEP 448 - 额外的解包通用化

所以这样写是可以的:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
51

是的,你可以使用 *args 这种写法(也叫做“星号参数”):

function_that_needs_strings(*my_list)

这里的 my_list 可以是任何可迭代的对象;Python 会遍历这个对象,把每个元素当作单独的参数传给函数。

你可以查看 调用表达式的文档,了解更多信息。

还有一种使用两个星号的写法,用来处理关键字参数:

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)

此外,还有 类似的语法,可以在函数定义中指定接收所有额外参数:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments
365
function_that_needs_strings(*my_list) # works!

你可以在这里了解更多内容:解包参数列表 - Python教程

撰写回答