当前位置: 首页 > 面试题库 >

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

赵选
2023-03-14
问题内容

在python 3.4中,我输入

[] = ""

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

[] = ()

也可以。

"" = []

引发异常,但是,

() = ""

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


问题答案:

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

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

foo, bar = 1, 2

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

当您这样做时:

[] = ""

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

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

[foo, bar, baz] = "abc"

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

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

请参阅 赋值语句
文档

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

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

强调我的

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

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



 类似资料:
  • 问题内容: 这是在最近的PyCon演讲中提出的。 该声明 没有任何意义,但是也不会引发异常。我觉得这一定是由于拆箱规则造成的。您也可以使用列表对元组进行解包,例如, 符合您的期望。作为逻辑结果,当要拆包的元素数为0时,这也应该起作用,这将解释为什么分配给空列表是有效的。当您尝试将非空列表分配给空列表时会发生什么,进一步支持了该理论: 如果元组也是如此,我将对此解释感到满意。如果我们可以解压缩到包含

  • 以下代码编译确定: 但是嵌套列表不会: 这是为什么?如果我需要这样做,“正确”的方法是什么? 用例是我有一个方法,它返回许多不同集合中的一个,其中元素类型本身是泛型的,每个可能的返回值都有不同的定义类型,其中返回值取决于传入的参数。目前,作为一种解决方法,我将结果分配给一个变量,其中类型是带有通配符的集合类型(即<code>列表

  • 在一个空列表中,当循环计算到时发生的过程是什么? 例如: 本质上,我想知道

  • 问题内容: 我在python中使用队列时,即使代码对我来说看起来很完美,但我仍然在代码中出现错误,但是后来当我突然更改赋值样式时,代码开始工作。该代码看起来像以前一样。 后来我改变了这个,它开始工作 为什么两个代码的工作方式不同? 问题答案: Python中的变量是引用或名称,不像C中的变量等。 这段代码: 表示“允许名称引用通过调用在内存中创建的对象,并允许该名称引用指向的对象。” 这意味着两个

  • 问题内容: 之间有什么区别 和 在Python中? 编辑 我应该提到,在该分配列表变量已分配给列表之前: 要么 问题答案: 当你做 您正在将 名称 指向一个对象。它不会以 任何方式 更改用于指向的旧对象,尽管如果没有其他指向该对象的引用,其引用计数将降至零,并且将被删除。 当你做 您正在遍历,创建中间元组,并将元组的每个项目分配给 现有 对象中的索引。这意味着,如果多个名称指向同一个对象,你会看到