del 命令

此命令有几个相关但不同的形式。

del v

如果 v 是变量,则命令 del v 将从其范围中删除变量。例如:

x = 5
print(x) # out: 5
del x
print(x) # NameError: name 'f' is not defined

请注意,del 是一个绑定出现,这意味着除非另有明确说明(使用 nonlocalglobal),del v 将使 v 成为当前范围的本地。如果你打算在外部范围内删除 v,请在 del v 语句的相同范围内使用 nonlocal vglobal v

在以下所有内容中,命令的用意是默认行为,但不是由语言强制执行。可能以使这一意图无效的方式编写类。

del v.name

此命令触发对 v.__delattr__(name) 的调用。

目的是使属性 name 不可用。例如:

class A:
    pass

a = A()
a.x = 7
print(a.x) # out: 7
del a.x
print(a.x) # error: AttributeError: 'A' object has no attribute 'x'

del v[item]

此命令触发对 v.__delitem__(item) 的调用。

目的是 item 不属于对象 v 实现的映射。例如:

x = {'a': 1, 'b': 2}
del x['a']
print(x) #  out: {'b': 2}
print(x['a']) # error: KeyError: 'a'

del v[a:b]

这实际上叫 v.__delslice__(a, b)

意图类似于上面描述的意图,但是使用切片 - 项目范围而不是单个项目。例如:

x = [0, 1, 2, 3, 4]
del x[1:3]
print(x) #  out: [0, 3, 4]

另请参阅垃圾收集#del 命令