有没有一种更 Pythonic 的方式来在函数的参数上展开列表?

Posted

技术标签:

【中文标题】有没有一种更 Pythonic 的方式来在函数的参数上展开列表?【英文标题】:Is there a more pythonic way of exploding a list over a function's arguments? 【发布时间】:2012-12-03 05:09:19 【问题描述】:
def foo(a, b, c):
 print a+b+c

i = [1,2,3]

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

【问题讨论】:

函数定义中多次使用,调用的时候为什么不使用...谢谢各位python大佬还原。 【参考方案1】:

是的,使用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'

【讨论】:

【参考方案2】:

它被称为argument unpacking,它有一个运算符。

foo(*i)

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

【讨论】:

+1 用于删除游戏名称。实际上,这有助于谷歌搜索任何语言的东西。非常感谢。【参考方案3】:

是的,Python 支持:

foo(*i)

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

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

bar(**j)

【讨论】:

以上是关于有没有一种更 Pythonic 的方式来在函数的参数上展开列表?的主要内容,如果未能解决你的问题,请参考以下文章

pythonic方式在没有索引变量的情况下做N次?

Python 2.6 中的随机字符串(可以吗?)

是否有一种优雅的 Pythonic 方式来计算已处理的数据? [复制]

寻找一种更有效(和可移植)的方式在 unix 中获取(数字)文件权限

Python 等价于 Java StringBuffer?

以pythonic方式打印字典中最大值的键[重复]