相关疑难解决方法(0)

为什么分配给空列表而不是空元组是有效的?

这是在最近的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)

似乎解包规则不适用于元组,因为它们用于列表.我想不出对这种不一致的任何解释.这种行为有原因吗?

python iterable-unpacking

30
推荐指数
2
解决办法
1324
查看次数

标签 统计

iterable-unpacking ×1

python ×1