Python中用于解压元组作为函数参数的惯用方法是什么?

114

这看起来不太好。有没有更符合Python风格的方法?

import datetime

t= (2010, 10, 2, 11, 4, 0, 2, 41, 0)
dt = datetime.datetime(t[0], t[1], t[2], t[3], t[4], t[5], t[6])

6
你可以阅读文档了解更多信息:http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists。 - Nadia Alramli
2个回答

158
通常,您可以使用func(* tuple)语法。您甚至可以传递元组的一部分,这似乎是您在此处尝试做的事情。
t = (2010, 10, 2, 11, 4, 0, 2, 41, 0)
dt = datetime.datetime(*t[0:7])

这被称为元组解包(unpacking),也可以用于其他可迭代对象(如列表)。以下是另一个示例(来自Python教程):

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]

7
它适用于任意可迭代对象。 - Mike Graham
3
我想补充一点,在 Python 3.5 中,这种语法可以在任何地方使用(不仅限于函数调用),因此像 x, y, z = *(1, 2, 3) 这样的语句也可以正常工作,不会出错(应该早就实现了)。 - Nearoo
有没有办法在其他列表项中完成这个操作?例如 my_tuple = ("B", "C"); "%s %s %s" % ("A", *my_tuple) - Dannid
没关系 - 我认为这是 %s 字符串替换方法的一个限制。使用 "{} {} {}".format("A", *my_tuple) 可以解决问题。 - Dannid
有人知道Python如何在内部实现解包吗? - dopatraman

16

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接