我有一个元组foo
,其中包含我不关心的内容和我所做的事情。
foo = (something_i_dont_need, something_i_need)
使用
更正确_, x = foo
或
x = foo[1]
如果foo
不是长度为2,我唯一能想到的就是不同的行为。
我认为这是相当具体的案例,但这是事实上的pythonic做事方式之一吗?
答案 0 :(得分:11)
我使用_
十多年了。它更具可读性,尤其是在提取多个值时:
_, _, name, _, _, city, _ = whatever
即使只有一个变量,另一种方式是强迫人类读者在他们想要真正理解代码的情况下进行计数,更可能的是他们的眼睛只是要通过它。
使用下划线,您可以更好地利用人脑的模式匹配能力。可能是一件小事,但在调试时每一点都有帮助。 :)
答案 1 :(得分:8)
我认为通常的做法是
x=foo[index]
使用_
不太常见,我认为也不鼓励。如果您只需要长_
/ tuple
中的一些元素,则使用list
也很难处理。当你只选择一个连续的子序列时,切片也很方便。
但在一天结束时,我认为这只是主观偏好的问题。使用对您和您的团队来说更具可读性的任何内容。
答案 2 :(得分:2)
两者都是可以接受的,我在生产代码中都看到过。我认为选择背景,意图和当地风格。
还有第三个选项,代码描述了未使用的值:
_real, imaginary = foo
我在代码中使用全部三个,具体取决于哪个最清楚:
_, x = foo
x=foo[i]
_real, imaginary = foo
foo
是一个复数。)答案 3 :(得分:1)
如果这是函数或方法的返回值,另一种方法是编写一个包装器函数(或类的子类并添加一个方法),它只返回你感兴趣的项目,然后调用它。 / p>
答案 4 :(得分:1)
另一种可能性是创建一个命名元组并在您的返回值中使用它。然后你就可以通过“name”访问你想要的值。
MyTuple = collections.namedtuple('MyTuple', 'ignored needed')
然后你可以制作
foo = (something_i_dont_need, something_i_need)
进入
foo = MyTuple(something_i_dont_need, something_i_need)
然后说
x = foo.needed
代替
x = foo[1]
性能方面,这可能不是最好的。但我认为它有时可以使编写和理解代码更容易。它是其他一些解决方案的替代方案。
答案 5 :(得分:0)
第一种情况:foo需要两个变量unpack
(元组长度为2)。 _完全可以。
第二种情况:给你index value
(切片)