繁体   English   中英

Python:`del my_list` vs`del [my_list]`

[英]Python: `del my_list` vs `del[my_list]`

我在Python中创建了一个列表

>>> my_list = [1, 2, 3, 4]

现在,如果我想删除列表,我想使用del运算符

>>> del my_list

这很好用,可能是使用它的一般方法。 但在某个地方,我偶然发现了一种不寻常的语法

>>> del[my_list]

而这也是一样的! 现在我有点困惑del del实际工作。 我可以理解以前的语法, del是一个内置语句,但第二个语法看起来像是对我的索引。

del获取目标名称列表 ,请参阅参考文档

 del_stmt ::= "del" target_list 

就像对分配for循环 ,目标列表包括使用[...](...)列表和元组的语法:

del (foo, bar)
del [spam, ham, eggs]

所以你没有订阅del ,你正在删除一个名单。

你甚至可以嵌套它们:

del (foo, [ham, eggs])

重新使用现有语法规则比将语法严格限制为以逗号分隔的名称列表更简单。

完整的语法定义是:

 target_list ::= target ("," target)* [","] target ::= identifier | "(" [target_list] ")" | "[" [target_list] "]" | attributeref | subscription | slicing | "*" target 

所以del *names在技​​术上也是有效的,但编译器特殊情况仍然是最后一个选项是SyntaxError

>>> foo = None
>>> del *foo
  File "<stdin>", line 1
SyntaxError: can't use starred expression here

它没有索引。

del eting的东西,你可以指定不止一两件事,一次删除:

del a, b

您还可以使用括号或括号括起删除目标:

del [a, b]
del (a, b)

即使只有一个删除目标,您也可以这样做:

del [a]

此行为主要反映赋值,其中可选括号或括号对嵌套解包很有用:

nested_tup = (1, (2, 3))
[a, [b, c]] = nested_tup

虽然你在技术上允许做del [a, [b, c]] ,但它相当于del a, b, c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM