有没有一种更 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 方式来计算已处理的数据? [复制]