元组拆包:虚拟变量 vs 索引
在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
设置为 0
,b
设置为 4
,而 rest
则会变成 [1, 2, 3]
。
10
value = func_returning_a_tuple()[0]
看起来更清晰,而且也可以更灵活地使用。
如果这个函数返回的是一个包含超过两个值的元组呢?
如果程序逻辑需要关注这个元组的第四个元素呢?
如果返回的元组大小不固定呢?
这些问题对使用下标的方式没有影响,但对多重赋值的方式就会有影响。