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 命令