Python 中 ''和False和None你真的了解吗?
前言
大家请看下面的一个案列
if '' == None:
print('ok')
if '' == False:
print('ok')
if None == False:
print('ok')
if [] == False:
print('ok')
if [] == None:
print('ok')
if [] == '':
print('ok')
我一直认为序列类型(list,tuple,dict,set):空表示False,非空表示True
结果是啥都没有执行
这是为什么呢?
一、None
在 Python 中,有一个特殊的常量 None(N 必须大写)。和 False 不同,它不表示 0,也不表示空字符串,而表示没有值,也就是空值。
这里的空值并不代表空对象,即 None 和 []、“” 不同:
None is []
False
None is ''
False
None 有自己的数据类型,我们可以在 IDLE 中使用 type() 函数查看它的类型,执行代码如下:
type(None)
<class 'NoneType'>
print() 函数输出数据,其实该函数的返回值就是 None。因为它的功能是在屏幕上显示文本,根本不需要返回任何值,所以 print() 就返回 None。
>>> spam = print('Hello!')
Hello!
>>> None == spam
True
另外,对于所有没有 return 语句的函数定义,Python 都会在末尾加上 return None,使用不带值的 return 语句(也就是只有 return 关键字本身),那么就返回 None。
二、序列类型(list,tuple,dict,set)
1.我一直认为python有这样的逻辑a=b,b=c,a=c
if not set():
print('ok1')
if not '':
print('ok1')
if not []:
print('ok1')
if [] == {}:
print('ok2')
if 0 == {}:
print('ok2')
结果是:
后来查阅资料发现
" is" 是用来比较 a 和 b 是不是指向同一个内存单元,而"=="是用来比较 a 和 b指向的内存单元中的值是不是相等。
也就是说虽然他们的布尔类型虽然是一样的但是用==的时候系统判断类型不一样值就不一样。
最后
我为什么我产生这样的情况呢?我是因为c语言中的0和false之类的东西是一样的。