深入理解python中的None對象 || 深入理解json數據格式中的null


深入理解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": []
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM