元组解包:虚拟变量与索引

Pet*_*ham 12 python coding-style

在Python中编写这个通常/最清晰的方法是什么?

value, _ = func_returning_a_tuple()
Run Code Online (Sandbox Code Playgroud)

要么:

value = func_returning_a_tuple()[0]
Run Code Online (Sandbox Code Playgroud)

mjv*_*mjv 10

value = func_returning_a_tuple()[0] 看起来更清晰,也可以推广.

如果函数返回一个超过2个值的元组怎么办?
如果程序逻辑对一个无数元组的第四个元素感兴趣怎么办?
如果返回的元组的大小变化怎么办?

这些问题都不会影响基于下标的习语,但是在多分配习语的情况下也是如此.


phy*_*ael 9

如果您在python3.x中有一种方便的方法,请查看Python的新功能页面上的python增强建议(PEP)3132 :

扩展的Iterable解包.你现在可以写像a, b, *rest = some_sequence.甚至*rest, a = stuff.其余对象始终是(可能为空)列表; 右侧可以是任何可迭代的.例:

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

这设置a0,bto 4restto [1, 2, 3].


Ale*_*lli 6

对于提取单个项目,索引更加惯用.当您提取两个或更多项目时,解压缩变得更加惯用.这只是我的经验观察; 我不知道任何风格指南推荐或强制要么选择! - )