为什么分配一个空列表(例如[] =“”)不是错误?

瓦尔德:

在python 3.4中,我输入

[] = "" 

并且工作正常,不会引发异常。虽然当然[]不等于""事后。

[] = ()

也可以。

"" = []

引发异常,但是,

() = ""

虽然引发了异常,但是。发生什么了?

马丁·彼得斯(Martijn Pieters):

您不是为了平等而比较。您正在分配

Python允许您分配给多个目标:

foo, bar = 1, 2

将两个值分别分配给foobar您只需要在右侧有一个序列可迭代,在左侧有一个名称列表或元组。

当您这样做时:

[] = ""

您为名称列表分配了一个序列(空字符串仍然是序列)。

本质上与执行此操作相同:

[foo, bar, baz] = "abc"

最终以foo = "a"bar = "b"结束baz = "c",但字符数减少了。

但是,您不能将其分配给字符串,因此""分配的左侧永远不会起作用,并且始终是语法错误。

请参阅赋值语句文档

赋值语句评估表达式列表(请记住,它可以是单个表达式或逗号分隔的列表,后者产生一个元组),并将单个结果对象从左到右分配给每个目标列表。

将对象分配给目标列表(可选地用括号或方括号括起来)的方式如下所述。

强调我的

Python不会为空列表引发语法错误实际上是一个错误!正式记录的语法不允许有空的目标列表,对于空的目标,()确实会出错。bug 23275 ; 它被认为是无害的错误:

起点是认识到这种情况已经存在很长时间并且是无害的。

另请参见为什么分配给空列表而不分配给空元组有效吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当N = 1时,为什么我得到一个空列表而不是[0]

在Python中,为什么list(None)是一个错误,但[None]不是一个错误?

为什么int变量抛出一个错误,而不是在分配给一个字节变量文字的诠释?

为什么需要在main中装一个标准错误,而不是io错误?

为什么向这个 Haskell 函数提供一个空列表会导致编译器错误?

为什么foo = filter(...)返回一个<filter object>而不是一个列表?

为什么我的代码给我一个值而不是一个列表

为什么为什么不断出现错误“ min()arg是一个空序列”?

为什么一个空的javascript对象既不是true也不是false?

为什么使用Double而不是给我一个歧义性错误?

为什么声明一个叫做cin的std :: ifstream不是编译错误?

为什么我在 React 中的 map 函数给我一个错误?(...不是函数)

为什么会出现错误:“。isValid()”不是一个函数?

为什么我收到类型错误:“function_name”不是一个函数

为什么Rust会告诉“编译时大小未知”,而不是(无效的)片对片分配中的另一个错误?

为什么我会得到一个NoClassDefFoundError的例外,而不是一个StackOverflow的错误?

为什么 Python .append() 附加两个值,而不是列表中的一个?

为什么我不能分配一个函数指针变量来指向一个特定的函数。错误如下

为什么JButton打开一个空框架而不是调用PMotion类?

为什么在某些编译器中可以声明一个数组,例如int myarr [noconstant]; 而不是别人?

使用php访问SQL时,为什么要输入一个变量,例如““。$ q。”',而不是仅输入$ q或“ $ q”

为什么我得到一个表达式无法分配错误

为什么不在TensorFlow中分配内存不是错误?

使用 tabula-py 为什么我得到一个列表而不是一个数据框?

为什么 + 运算符创建一个新列表但 += 不是

为什么 reduce 返回一个列表而不是单个值?

为什么我的循环只返回一个答案而不是整个列表的答案?

无法理解为什么我得到一个空指针错误

为什么console.log错误地打印一个空数组?