可以在Python中解包元组而不创建不需要的变量吗?
有没有一种方法可以编写下面的函数,这样我的IDE就不会抱怨column是一个未使用的变量可以在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() 您还可以避免
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