在一个期望传入一组项目的函数中,我如何传递 Python 列表项而不会出现错误?
my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!
肯定有一种方法可以扩展列表,并且在传递函数'red','blue','orange'
时快速完成。我认为这被称为“解包”。
在一个期望传入一组项目的函数中,我如何传递 Python 列表项而不会出现错误?
my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!
肯定有一种方法可以扩展列表,并且在传递函数'red','blue','orange'
时快速完成。我认为这被称为“解包”。
是的,你可以使用*args
(展开)语法:
function_that_needs_strings(*my_list)
其中my_list
可以是任何可迭代对象;Python会循环遍历给定的对象,并将每个元素作为函数的单独参数使用。
请参阅调用表达式文档。
还有一个关键字参数等效形式,使用两个星号:
kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)
在函数签名中,还有equivalent syntax指定catch-all参数的等效语法:
def func(*args, **kw):
# args now holds positional arguments, kw keyword arguments
list
。
PEP 448 - Additional Unpacking Generalizations
因此,这将起作用:
a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
function_that_needs_strings(*(a+b))
需要字符串。 - azaleafunction_that_needs_strings(*itertools.chain(a, b))
- limitedeternity