深入理解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": [] }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!