del 命令
此命令有几个相关但不同的形式。
del v
如果 v
是变量,则命令 del v
将从其范围中删除变量。例如:
x = 5
print(x) # out: 5
del x
print(x) # NameError: name 'f' is not defined
请注意,
del
是一个绑定出现,这意味着除非另有明确说明(使用nonlocal
或global
),del v
将使v
成为当前范围的本地。如果你打算在外部范围内删除v
,请在del v
语句的相同范围内使用nonlocal v
或global 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 命令 。