Python 簡易手冊
單元 32 - del 陳述
關鍵字 (keyword) del 用來刪除變數 (variable) 或識別字 (identifier) ,使之在目前的作用域 (scope) 不具效力,或是刪除可變 (mutable) 複合資料型態 (command data type) 的元素,讓直譯器 (intepreter) 可以進行資源回收,釋出記憶體空間,舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 定義互相連結的變數 a = 12 b = a c = b # 刪除變數 a 、 b del a del b # 印出變數 c print(c) # 檔名: del_demo.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
這個例子變數 a 、 b 、 c 都被設定成整數 12 ,代表變數 a 、 b 、 c 都指向整數 12 這個物件,第 7 行及第 8 行分別刪除變數 a 及 b
6 7 8 | # 刪除變數 a 、 b del a del b |
底下印出變數 c ,執行結果如下
> python del_demo.py |
12 |
> |
由於變數 a 、 b 、 c 都是 12 ,但是只有刪除 a 、 b ,所以變數 c 依然會是整數 12 。
利用內建函數 (built-in function) locals() ,我們可以查詢目前作用域的有效識別字,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 定義函數 def do_something(): a = 1 print(locals()) del a print(locals()) # 呼叫函數 do_something() # 檔名: del_demo2.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
這裡定義了函數 (function) do_something() ,然後在 do_somehting() 中建立區域變數 (local variable) a ,再印出 locals() ,接著用關鍵字 del 刪除 a ,再印出 locals()
1 2 3 4 5 6 | # 定義函數 def do_something(): a = 1 print(locals()) del a print(locals()) |
單元 44 - 函數與 return 陳述會介紹如何定義函數。
最底下呼叫 do_somehting() ,此例執行結果如下
> python del_demo2.py |
{'a': 1} {} |
> |
簡單說,當前作用域的識別字會以字典 (dictionary) 方式儲存, locals() 回傳這個字典,當刪除某個識別字,也就是從字典中刪除該 key 。
單元 41 - 字典會介紹詳細介紹字典的用法。
以下程式示範用關鍵字 del 刪除串列 (list) 的元素及刪除串列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 定義串列變數 a = [1, 2, 3] # 印出變數 a print(a) # 刪除 a 的元素 del a[0] # 印出變數 a print(a) # 刪除 a del a # 印出變數 a print(a) # 檔名: del_demo3.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
第 6 行先刪除串列變數 a 的元素,然後在第 10 行刪除變數 a ,這樣最後印出變數 a 會導致出錯,此例執行結果如下
> python del_demo3.py |
[1, 2, 3] [2, 3] Traceback (most recent call last): File "del_demo3.py", line 12, in <module> print(a) ^ NameError: name 'a' is not defined |
> |
單元 39 - 串列會介紹詳細介紹串列的用法。
參考資料
- https://docs.python.org/3/reference/simple_stmts.html#the-del-statement
- https://docs.python.org/3/tutorial/datastructures.html#the-del-statement