首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:‘`del my_list` vs `del[my_list]’

Python:‘`del my_list` vs `del[my_list]’
EN

Stack Overflow用户
提问于 2017-07-10 21:24:05
回答 2查看 234关注 0票数 3

我用Python创建了一个列表

代码语言:javascript
复制
>>> my_list = [1, 2, 3, 4]

现在,如果我想删除列表,我想使用del操作符,如

代码语言:javascript
复制
>>> del my_list

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

代码语言:javascript
复制
>>> del[my_list]

这也是一样的事!现在我有点搞不懂德尔到底是怎么工作的。我可以理解前面的语法,del是一个内置语句,但在我看来,第二个语法就像是索引。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-10 21:28:46

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

del_stmt ::= "del“target_list

作业一样,目标列表包括使用[...](...)列表以及元组语法:

代码语言:javascript
复制
del (foo, bar)
del [spam, ham, eggs]

因此,您不是订阅del,而是删除一个名称列表。

你甚至可以筑巢:

代码语言:javascript
复制
del (foo, [ham, eggs])

重用现有语法规则比严格将语法限制为逗号分隔的名称列表要简单得多。

完整的语法定义是:

target_list ::=目标(",“目标)* ",”x目标::=标识符"(“target_list ")”分部"[“target_list”]

因此,del *names在技术上也是有效的,但编译器的特例中,最后一种选择是SyntaxError

代码语言:javascript
复制
>>> foo = None
>>> del *foo
  File "<stdin>", line 1
SyntaxError: can't use starred expression here
票数 10
EN

Stack Overflow用户

发布于 2017-07-10 21:28:36

这不是索引。

del处理事物时,您可以一次指定多个要删除的内容:

代码语言:javascript
复制
del a, b

还可以用括号或括号包围删除目标:

代码语言:javascript
复制
del [a, b]
del (a, b)

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

代码语言:javascript
复制
del [a]

这种行为在很大程度上反映了赋值行为,在这种情况下,可选括号或括号对于嵌套解包装非常有用:

代码语言:javascript
复制
nested_tup = (1, (2, 3))
[a, [b, c]] = nested_tup

虽然技术上允许您做类似del [a, [b, c]]的事情,但它等同于del a, b, c

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45021822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档