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之类的东西是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值