这是在最近的PyCon演讲中提出的.
该声明
[] = []
Run Code Online (Sandbox Code Playgroud)
没有任何意义,但它也没有抛出异常.我觉得这一定是因为拆包规则.您也可以使用列表进行元组拆包,例如,
[a, b] = [1, 2]
Run Code Online (Sandbox Code Playgroud)
做你所期望的.作为逻辑结果,当解包的元素数为0时,这也应该有效,这可以解释为什么分配给空列表是有效的.当您尝试将非空列表分配给空列表时会发生什么,这进一步支持了这一理论:
>>> [] = [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
如果对于元组也是如此,我会对这个解释感到满意.如果我们可以解压缩到包含0个元素的列表,我们也应该能够解包为具有0个元素的元组,不是吗?然而:
>>> () = ()
File "<stdin>", line 1
SyntaxError: can't assign to ()
Run Code Online (Sandbox Code Playgroud)
似乎解包规则不适用于元组,因为它们用于列表.我想不出对这种不一致的任何解释.这种行为有原因吗?