6
def foo(a, b, c):
 print a+b+c

i = [1,2,3]

有没有办法在 i 上不显式索引的情况下调用 foo(i)?试图避免 foo(i[0], i[1], i[2])

4

3 回答 3

10

是的,使用foo(*i)

>>> foo(*i)
6

您还可以*在函数定义中使用: def foo(*vargs)将所有非关键字参数放入一个名为vargs. 并且使用**, 例如def foo(**kargs), 会将所有关键字参数放入一个名为 的字典中kargs

>>> def foo(*vargs, **kargs):
        print vargs
        print kargs

>>> foo(1, 2, 3, a="A", b="B")
(1, 2, 3)
{'a': 'A', 'b': 'B'}
于 2012-12-15T11:00:05.393 回答
4

它被称为参数解包,并且有一个运算符。

foo(*i)

顺便说一句,它适用于任何可迭代对象,而不仅仅是列表。

于 2012-12-15T11:00:50.307 回答
3

是的,Python 支持:

foo(*i)

请参阅Unpacking Argument Lists的文档。适用于任何可迭代的东西。有两颗星**,它适用于 dicts 和命名参数。

def bar(a, b, c): 
    return a * b * c
j = {'a': 5, 'b': 3, 'c': 2}

bar(**j)
于 2012-12-15T11:00:04.500 回答