相关疑难解决方法(0)

为什么不分配空列表(例如[] ="")错误?

在python 3.4中,我正在打字

[] = "" 
Run Code Online (Sandbox Code Playgroud)

它工作正常,没有异常.虽然当然[]不等于""事后.

[] = ()
Run Code Online (Sandbox Code Playgroud)

也行得很好.

"" = []
Run Code Online (Sandbox Code Playgroud)

尽管如此提出例外,

() = ""
Run Code Online (Sandbox Code Playgroud)

尽管如此提出例外.发生什么了?

python syntax variable-assignment

110
推荐指数
2
解决办法
4043
查看次数

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

这是在最近的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
查看次数