Python 里面 False == None 为什么是 False 而不是 True

2018-05-03 18:15:22 +08:00
 John60676

有没有人能解答一下

4996 次点击
所在节点    程序员
31 条回复
Hopetree
2018-05-03 18:20:36 +08:00
```
print(False==None)
print(False==0)
print(0==None)
print(None==None)

False
True
False
True
```
alvin666
2018-05-03 18:22:21 +08:00
false 是一个布尔型的变量,在内存中有相应的空间且有存储变量内容,none 意思是空,内存中没有存储(但是有相应的空间)
annielong
2018-05-03 18:25:17 +08:00
一个是布尔一个是空,肯定是不一样的,甚至空的字符串和 none 都不是一样的
SuperMild
2018-05-03 18:39:40 +08:00
尽量避免不同类型之间直接比较,特别是动态类型或弱类型语言,往往出现奇怪现象,与其在这上面浪费脑力(同时也给看代码的人添麻烦),还不如采用最佳实践。
purebluesong
2018-05-03 18:39:48 +08:00
楼主之前是写弱类型语言的吧
lolizeppelin
2018-05-03 18:41:25 +08:00
flase 是 0
none 是 null
clino
2018-05-03 18:42:24 +08:00
print(False==bool(None))
这样就能达到你的目的
huahuajun9527
2018-05-03 18:53:08 +08:00
False == None
相当于 False.__eq__(None)

```
>>> False.__eq__(None)
NotImplemented
>>> r = False.__eq__(None)
>>> type(r)
<class 'NotImplementedType'>
```
而 NotImplemented 则参考下面链接的文章

参考:
https://stackoverflow.com/questions/3588776/how-is-eq-handled-in-python-and-in-what-order  

https://stackoverflow.com/questions/878943/why-return-notimplemented-instead-of-raising-notimplementederror
enenaaa
2018-05-03 19:10:18 +08:00
python 虽然是脚本,但是强类型语言
CSM
2018-05-03 20:13:39 +08:00
因为他们类型不同,不相等很合理。
我甚至觉得应该直接 raise 一个 TypeError 才合理
vipfts
2018-05-03 20:26:46 +08:00
print(type(False))
print(type(None))
>>>>>>>>>>>>
<class 'bool'>
<class 'NoneType'>
SimbaPeng
2018-05-03 21:01:00 +08:00
Python 不同数据类型之间比较永远不相等,文档里都有写的
SimbaPeng
2018-05-03 21:02:38 +08:00
出了 number 这个大类下面的数据类型之间比较会进行数学上的比较之外
SimbaPeng
2018-05-03 21:02:50 +08:00
@SimbaPeng 除了
SimbaPeng
2018-05-03 21:06:15 +08:00
另外判断是否为 False 或 None 的时候请用 is
whx20202
2018-05-03 21:08:51 +08:00
java 里面 false 和 null 也不一样啊 ,虽然基本类型没法直接比
secondwtq
2018-05-03 21:22:37 +08:00
吃着屎说 真香
lmqdlr
2018-05-03 22:03:35 +08:00
Python 是动态类型的强类型啊,跟 js 那种坑货不一样
ltoddy
2018-05-03 22:23:53 +08:00
== 比较的时候,先调用__eq__()方法,然后如果没有的话,会再调用__hash__()方法,所以才会看到 False==0 返回 True 的结果。
Arnie97
2018-05-04 01:23:04 +08:00
建议用 is 和 is not 来和 None 比较

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/451839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX