【问题标题】:What is special about deleting an empty list?删除空列表有什么特别之处?
【发布时间】:2013-01-13 07:47:02
【问题描述】:

考虑以下...

In [1]: del []

In [2]: del {}
  File "<ipython-input-2-24ce3265f213>", line 1
SyntaxError: can't delete literal

In [3]: del ""
  File "<ipython-input-3-95fcb133aa75>", line 1
SyntaxError: can't delete literal

In [4]: del ["A"]
  File "<ipython-input-5-d41e712d0c77>", line 1
SyntaxError: can't delete literal

[] 有什么特别之处?我希望这也会引发SyntaxError。为什么不呢?我在 Python2 和 Python3 中观察到了这种行为。

【问题讨论】:

  • 以同样的方式:[] = () 有效,但 "" = "" 无效

标签: python


【解决方案1】:

del statement syntax 允许 target_list,其中包括变量名称的列表或元组。

它旨在一次删除多个名称:

del [a, b, c]

相当于:

del (a, b, c)

del a, b, c

但是python并不强制列表实际上有任何个元素。

表达式

del ()

另一方面,语法错误;在这种情况下,() 被视为文字空元组。

【讨论】:

  • 感谢您的解释,但有趣的是,del () 给了我们SyntaxError: can't delete () 而不是SyntaxError: can't delete literal,这可能意味着它是单独检查的。由于某种原因,它不会检查列表。 :)
  • 但在文档中,targettarget_list 都不能为空。 () 的语法错误似乎很奇怪,但 [] 的语法错误却没有
  • 也许这是一个实现的东西?
  • @frb:是解析器给出了这些错误;我 90% 确定这是因为括号也可以将表达式组合在一起,而不仅仅是创建元组。
  • 可能文档有误:target 可以包含星号表达式,但您不能使用del a, *b。此外,target_list 必须至少包含一个 target,而 [] 不是有效目标,就像 () 不是一样
猜你喜欢
  • 2021-09-25
  • 1970-01-01
  • 2012-05-28
  • 2011-04-18
  • 2017-02-19
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多