我认为'解包'可能是错误的词汇 - 道歉,因为我确信这是一个重复的问题。
我的问题非常简单:在一个需要项目列表的函数中,如何在不出错的情况下传递Python列表项?
my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!
当然必须有一种方法来扩展列表,并在蹄上传递函数'red','blue','orange'
?
答案 0 :(得分:212)
function_that_needs_strings(*my_list) # works!
答案 1 :(得分:24)
是的,您可以使用*args
(splat)语法:
function_that_needs_strings(*my_list)
其中my_list
可以是任何可迭代的; Python将循环遍历给定对象,并将每个元素用作函数的单独参数。
请参阅call expression documentation。
还有一个关键字参数等效,使用两颗星:
kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)
并且equivalent syntax用于在函数签名中指定catch-all参数:
def func(*args, **kw):
# args now holds positional arguments, kw keyword arguments
答案 2 :(得分:9)
从Python 3.5开始,您可以解压缩无限量的list
s。
PEP 448 - Additional Unpacking Generalizations
所以这会奏效:
a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)