python之判断对象是否为空
判断对象是否为None
- 要研究这个问题,首先我们要弄清楚,啥是None.
①None表示空值,它是一个特殊 Python 对象, None的类型是NoneType.
②在一个解释器进程中只有一个 None 对象存在。
我们用下面这两段代码,验证一下这些说法:
In [68]: type(None)Out[68]: NoneTypeIn [67]: None is None
Out[67]: True
In [69]: None == None
Out[69]: True
看到上面这段代码,我突然就像扯到另一个问题。即:is和==的区别
- is和==的区别
==是比较操作符,用来比较判断两个对象的value(值)是否相等。
is是同一性运算符,这个运算符比较两个对象的是id是否相同,可以检查两个变量是否引用了同一个对象。
举个例子,验证一下以上的说法:
In [80]: a = [1, 2]In [81]: b = [1, 2]
In [82]: a == b
Out[82]: True
In [83]: a is b
Out[83]: False
In [84]: id(a)
Out[84]: 743791852360
In [85]: id(b)
Out[85]: 743759644488
- 好了,我们回到刚才的话题,如何判断一个变量所关联的对象是否为None
我们已经知道了,is可以判断两个变量是否关联同一个对象(即变量id是否相同),也知道了在一个解释器进程中只有一个 None 对象,则我们可以推断出一个变量x只有关联None对象,才能实现x is None为True
我们敲一段代码验证一下,以上言论:
list01 = [None, False, '', {}, [], 0, ()]for item in list01:
print('第1种:', item is None,
'第2种:', not (item is None))
控制台输出:
第1种: True 第2种: False第1种: False 第2种: True
第1种: False 第2种: True
第1种: False 第2种: True
第1种: False 第2种: True
第1种: False 第2种: True
第1种: False 第2种: True
判断对象是否为空
啥叫空?反正我的理解是空字典{}空列表 []空字符串 ''空元祖 () 都叫空。
现在我有一个python逻辑运算符not,它相当于数学中的非运算,也就是说not False得到的结果应该是True,那么如果我们not {}或 not []会发生什么情况呢?
list01 = [None, False, '', {}, [], 0, ()]for item in list01:
print(not item)
控制台输出:
TrueTrue
True
True
True
True
True
我们看到以上结果都为Ture.
我们再向各个列表元祖字典字符串中加入数据:
list01 = ['e', {"w":1}, [3], 1, (5)]for item in list01:
print(not item)
控制台输出:
FalseFalse
False
False
False
嗯,结果都变成False了。
难道说…空字符串、空列表、空字典、空元祖可以代表False???
做一个实验:
list01 = ['', {}, [], ()]for item in list01:
if item:
print('{} is OK!!'.format(item))
else:
print('{} is not good'.format(item))
控制台输出:
is not good{} is not good
[] is not good
() is not good
好吧,在if之后的确代起到了False的作用。但具体为啥可以代表False, 没搞清楚.
现在熬夜脑子有点不好使。问题留下,以后再继续研究!!!