让我说我有:
[obj for (_, obj) in stack]
此代码假定stack
中的第一个对象是一个元组,并抛弃元组的第一部分。
如果代码不是元组,而是单个对象,会发生什么?
它是否只是忽略抛弃的部分并占据整个对象?
答案 0 :(得分:2)
不,它会引发异常。
>>> _, obj = [0]
ValueError: need more than 1 value to unpack
使用_
只是一个约定。它用于开发阅读代码(“哦,他的意思是变量不会被用于任何东西”)。但是对于解释器来说,在这种情况下它并不意味着什么,它也可能是任何其他标识符名称。
如果代码不是元组,而是单个对象,会发生什么?
这是在python3中得到改进的地方,你可以使用这个新选项:
>>> *_, obj = [0]
>>> _
[]
>>> obj
0
解压缩“last”对象现在仍然有效,而不是引发异常,无论容器中是否有1,2或3个以上的项目。
答案 1 :(得分:2)
_
它只是一个约定,任何其他名称的行为方式都相同。
名称_
只指向解压缩元组的第一个元素。当该名称超出范围引用时,计数器减少,没有其他命名引用解压缩元组的第一个元素",并且该对象可以安全地被垃圾收集。
由于_
仅是约定,因此尝试使用_
解包元组的行为与任何其他名称相同 - 它会引发异常,如下所示:
a, b = 1 # TypeError: 'int' object is not iterable
a, b = () # ValueError: need more than 0 values to unpack
a, b = (1, 2, 3) # ValueError: too many values to unpack
答案 2 :(得分:0)
你在for循环中使用的东西称为iterable-unpacking,这意味着任何iterable都被解包为变量名:
_
左侧的变量数必须与右侧的iterable中的项匹配。
如果数字不相等,则引发ValueError,如果右侧不可迭代,则引发TypeError。
在你的for循环中,你只使用第二个参数,按照惯例,未使用的变量被命名为self.errordialog(errormessage)
。