深入理解python中的None對象
1、 None 是python中的一個特殊的常量,表示一個空的對象,空值是python中的一個特殊值。
但是數據為空並不代表是空對象,例如 [],'' 等都不是 None 。 【空值並不代表是空對象】
None 和任何對象比較返回值都是 False ,除了自己。
例如:
print([] is None) # False print('' is None) # False
2、 None 對象有自己的數據類型 NontType ,你可以將 None 賦值給任意對象,但是不能創建一個 NoneType 對象。
None 是 NoneType數據類型的唯一值(其他編程語言可能稱這個值為 null、nil 或 undefined),也就是說,我們不能再創建其它 NoneType類型的變量,但是可以將 None 賦值給任何變量。
如果希望變量中存儲的東西不與任何其它值混淆,就可以使用 None。
print(type(None)) # <class 'NoneType'> n=NoneType() # Traceback (most recent call last): # File "C:\Users\liangshu.hu\PycharmProjects\practice\geely\v.py", line 5, in <module> # n=NoneType() # NameError: name 'NoneType' is not defined
False
python中數據為空的對象在判斷時的結果都為False;
其中 None,False,0,[],"",{},() 都相當於 False ,即 not None == not False == not '' == not 0 == not [] == not {} == not () 。
is 和 ==
①is表示的是對象標識符,用來檢查對象的標識符是否一致,即兩個對象在內存中的地址是否一致。在使用 a is b 語法的時候,相當於 id(a)==id(b) 。
②==表示兩個對象值是否相等,相當於調用 __eq__() 方法,即 a==b ==>a.__eq__(b) 。
Python里和None比較時,為什么是 is None 而不是 == None
因為 None 在Python里是個單例對象,一個變量如果是 None ,它一定和None指向同一個內存地址。【None對象在內存中永遠都只有一個內存地址】
例如:
a = None b = None print(id(a) == id(b)) # True
is None 是判斷兩個對象在內存中的地址是否一致, == None 背后調用的是 __eq__ 方法,但是__eq__ 方法可以被重載;
舉例:
class test: def __eq__(self, other): return True t = test() print(t) print(t is None) # t是一個存在於內存中的對象,而不是None對象 print(t == None) # 重寫了__eq__方法,返回True
運行結果:
<__main__.test object at 0x0000026A01E131F0> False True
對於所有沒有 return 語句的函數定義,Python 都會自動在末尾加上 return None ;
使用不帶值的 return 語句(也就是只有 return 關鍵字本身),那么函數也會自動返回 None 。
深入理解json數據格式中的null
示例1
服務器上的資源對象有一個鍵為“myCount”且沒有值的整形數據,則對應JSON格式數據:
①
{}
②
{ "myCount": null }
③
{ "myCount": 0 }
示例二
服務器上的資源對象有一個鍵為“myString”的沒有值的空字符串,則對應JSON格式數據:
①
{}
②
{ "myString": null }
③
{ "myString": "" }
示例三
服務器上的資源對象有一個鍵為“myArray”的沒有值的空列表,則對應JSON格式數據:
{ "myArray": [] }