HOWTO · Python
Python NULL
本教程討論 Python 中的 NULL
本頁內容
Python 沒有 NULL 關鍵字。它的類空值是內建的單例 None,常用來標示選用值或目前尚未設定的物件參照。使用 value is None 來檢查。None 是一個值,其型別為 NoneType;它不是數值零,Python 程式也不會指派 C 風格的指標。其他語言對 NULL 各有其語言特定的意義,因此不要假設不同語言中的 NULL 行為都相同。
檢查 Python 值是否為 None
一般情況下,請使用身分運算子 is 來檢查。它會判斷兩側是否參照同一個物件,因此 value is None 是辨認 Python 單例的明確寫法。這篇連結的檢查 Python 變數是否為 None 指南也介紹相同的操作。
執行以下獨立範例:
values = [None, "ready"]
for value in values:
if value is None:
print("value is None")
else:
print("value is set")
value is None
value is set
is 檢查會區分 None 值與字串,兩個分支則示範如何將相同模式套用到函式引數、查詢結果或選用欄位。請將範例值換成程式中要檢查的變數。
一般不建議使用 value == None。相等比較可以由物件的類別自訂,因此它不一定表示「這個值就是 None 單例」。比較一般值的內容時使用相等運算;檢查 None 時則使用身分運算。這也能避免把 0、False 或 "" 等其他看似為假的值誤認為 None。
檢查 Python 中 None 的型別
若要查看 None 值所屬的型別,請將它傳給 Python 內建的 type() 函式。回傳的類別名稱是 NoneType。None 是單例值;NoneType 則是它的型別。在一般程式碼中,使用身分檢查比檢查型別更清楚;不過,探索 Python 物件或閱讀診斷輸出時,type() 會很有幫助。
以下簡短範例會印出類別名稱,而非 Python 完整的類別表示法:
value = None
print(type(value).__name__)
NoneType
這個內建值的名稱是 NoneType。不要把 None 本身說成資料型別:它是具有該型別的物件。另外,也不要用 type(value) is type(None) 取代直接的 value is None 檢查;後者更明確地表達了要確認的事情。
在 Python 中以 None 表示不存在的物件參照
Python 變數會參照物件,但 Python 程式不會提供可指派的 C 風格指標。None 的常見用途之一,是表示尚未設定的選用參照,例如尚未連接另一個節點時,某個節點的子節點參照。這是一種建模慣例:該屬性的 None 代表什麼,由周圍的程式決定。
以下範例會定義一個具有兩個選用子節點參照的節點,並檢查左側子節點是否不存在:
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
root = Node("root")
print(root.left is None)
True
每個新節點的 left 和 right 一開始都設為 None;之後的程式碼可以將另一個 Node 指派給任一屬性。最後一個運算式會檢查左側子節點是否仍不存在。這個範例說明的是 Python 中的物件參照,而不是像 C 語言那樣可解參照或可指派 NULL 位址的指標。Python 的 None 是物件層級的值,依慣例用來表示不存在;使用選用參照前,程式應明確檢查這個值。