在函数参数中以pythonic方式解包元组是什么?

114 投票
2 回答
110761 浏览
提问于 2025-04-15 19:07

这段代码看起来很糟糕。有没有更符合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])

2 个回答

16

请参考这个链接:https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists

 dt = datetime.datetime(*t[:7])
158

一般来说,你可以使用 func(*tuple) 这样的写法。你甚至可以只传递元组中的一部分,这看起来就是你想要做的事情:

t = (2010, 10, 2, 11, 4, 0, 2, 41, 0)
dt = datetime.datetime(*t[0:7])

这被称为 解包 元组,实际上也可以用在其他可迭代对象上,比如列表。这里还有一个例子(来自 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]

撰写回答