元组拆包:虚拟变量 vs 索引

13 投票
4 回答
4926 浏览
提问于 2025-04-15 21:16

在Python中,通常最清晰的写法是什么呢?

value, _ = func_returning_a_tuple()

或者:

value = func_returning_a_tuple()[0]

4 个回答

6

提取单个项目时,使用索引的方法更常见。当你需要提取两个或更多项目时,使用解包的方法更常见。这只是我个人的观察,没听说过有什么风格指南推荐或规定这两种选择中的哪一种!-)

10

如果你想在Python 3.x中找到一个方便的方法,可以看看这个关于Python的新特性提案(PEP 3132),在这个新特性页面上有介绍:

扩展可迭代对象的解包。现在你可以写类似于 a, b, *rest = some_sequence 这样的代码。甚至可以写 *rest, a = stuff。这里的rest对象总是一个(可能是空的)列表;右边的部分可以是任何可迭代的对象。举个例子:

(a, *rest, b) = range(5)

这段代码会把 a 设置为 0b 设置为 4,而 rest 则会变成 [1, 2, 3]

10

value = func_returning_a_tuple()[0] 看起来更清晰,而且也可以更灵活地使用。

如果这个函数返回的是一个包含超过两个值的元组呢?
如果程序逻辑需要关注这个元组的第四个元素呢?
如果返回的元组大小不固定呢?

这些问题对使用下标的方式没有影响,但对多重赋值的方式就会有影响。

撰写回答