可以在Python中解包元组而不创建不需要的变量吗?

可以在Python中解包元组而不创建不需要的变量吗?,python,tuples,iterable-unpacking,Python,Tuples,Iterable Unpacking,有没有一种方法可以编写下面的函数,这样我的IDE就不会抱怨column是一个未使用的变量 def get_selected_index(self): (path, column) = self._tree_view.get_cursor() return path[0] 在这种情况下,我不关心元组中的第二个项,只想在解包时放弃对它的引用。在Python中,\uu通常用作被忽略的占位符 (path, _) = self._treeView.get_cursor() 您还可以避免

有没有一种方法可以编写下面的函数,这样我的IDE就不会抱怨column是一个未使用的变量

def get_selected_index(self):
    (path, column) = self._tree_view.get_cursor()
    return path[0]

在这种情况下,我不关心元组中的第二个项,只想在解包时放弃对它的引用。

在Python中,
\uu
通常用作被忽略的占位符

(path, _) = self._treeView.get_cursor()
您还可以避免解包,因为元组是可索引的

def get_selected_index(self):
    return self._treeView.get_cursor()[0][0]

如果您不关心第二项,为什么不提取第一项:

def get_selected_index(self):
    path = self._treeView.get_cursor()[0]
    return path[0]

它看起来很漂亮,我不知道是否有好的表现

a = (1, 2, 3, 4, 5)
x, y = a[0:2]

是的,这是可能的。使用
\uu
约定的已接受答案仍然会解包,只是解包到一个占位符变量

您可以通过以下方式避免这种情况:

这将提供与以下相同的
res

_, res = values

如上所述,当
是一个不是可索引集合(如
列表
元组
)的iterable时,解决方案就可以工作了。值得注意的是,
\uuuuuu
不是任何语法魔法,而是一种约定(当然,这是IDE和pylint认可的约定,Python约定非常强大……)没有约定,Python将一事无成!这个约定有文档记录吗?@Gaius:我相信Haskell明确地表示“放弃这个值”;在Python中仍然是一个赋值变量,理论上可以像其他变量一样使用。Python命令行解释器“神奇地”将u分配给上次计算的结果,因此如果您运行某个操作但忘记存储返回值,它将在
变量中为您捕获。在执行交互工作时,这是一件有用的事情。在上述情况下,我可能会进行索引而不是解包。请注意,返回现在应该是
返回路径
,而不是
返回路径[0]
这更弱,因为它删除了恰好有两个项目的断言。@Michael Mior:我已经回滚了您的编辑:根据原始问题,它仍然应该是
路径[0]
路径本身似乎是一个序列)我认为这不如占位符约定那么明确。在操作顺序上存在潜在的歧义,是不是:
(path=self.\u treeView.get\u cursor())[0]
还是
path=(self.\u treeView.get\u cursor()[0])
_, res = values