• 请不要在回答技术问题时复制粘贴 AI 生成的内容
John60676
V2EX  ›  程序员

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

  •  
  •   John60676 · May 3, 2018 · 6248 views
    This topic created in 3114 days ago, the information mentioned may be changed or developed.

    有没有人能解答一下

    Supplement 1  ·  May 4, 2018
    感谢楼下几位同学认真的回复,我自己又查了一下相关资料。感觉下面的文档的解释更加合理

    https://docs.python.org/3.0/whatsnew/3.0.html?highlight=incomparable#ordering-comparisons



    PS(楼下有些人真的很无聊,我拿个我自己不理解的问题上来问问,你觉得弱智,简单大可以无视,为啥还要专门回复一些无关紧要的答案来秀优越呢?)
    31 replies  •  2018-05-04 10:51:26 +08:00
    Hopetree
    Hopetree
    May 3, 2018❤️1
    1
    ```
    print(False==None)
    print(False==0)
    print(0==None)
    print(None==None)

    False
    True
    False
    True
    ```
    alvin666
    alvin666
    May 3, 2018 via Android❤️3
    2
    false 是一个布尔型的变量,在内存中有相应的空间且有存储变量内容,none 意思是空,内存中没有存储(但是有相应的空间)
    annielong
    annielong
    May 3, 2018
    3
    一个是布尔一个是空,肯定是不一样的,甚至空的字符串和 none 都不是一样的
    SuperMild
    SuperMild
    May 3, 2018❤️1
    4
    尽量避免不同类型之间直接比较,特别是动态类型或弱类型语言,往往出现奇怪现象,与其在这上面浪费脑力(同时也给看代码的人添麻烦),还不如采用最佳实践。
    purebluesong
    purebluesong
    May 3, 2018
    5
    楼主之前是写弱类型语言的吧
    lolizeppelin
    lolizeppelin
    May 3, 2018 via Android
    6
    flase 是 0
    none 是 null
    clino
    clino
    May 3, 2018 via Android
    7
    print(False==bool(None))
    这样就能达到你的目的
    huahuajun9527
    huahuajun9527
    May 3, 2018❤️1
    8
    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
    enenaaa
    May 3, 2018
    9
    python 虽然是脚本,但是强类型语言
    CSM
    CSM
    May 3, 2018 via Android
    10
    因为他们类型不同,不相等很合理。
    我甚至觉得应该直接 raise 一个 TypeError 才合理
    vipfts
    vipfts
    May 3, 2018
    11
    print(type(False))
    print(type(None))
    >>>>>>>>>>>>
    <class 'bool'>
    <class 'NoneType'>
    SimbaPeng
    SimbaPeng
    May 3, 2018 via Android❤️1
    12
    Python 不同数据类型之间比较永远不相等,文档里都有写的
    SimbaPeng
    SimbaPeng
    May 3, 2018 via Android
    13
    出了 number 这个大类下面的数据类型之间比较会进行数学上的比较之外
    SimbaPeng
    SimbaPeng
    May 3, 2018 via Android
    14
    @SimbaPeng 除了
    SimbaPeng
    SimbaPeng
    May 3, 2018 via Android
    15
    另外判断是否为 False 或 None 的时候请用 is
    whx20202
    whx20202
    May 3, 2018
    16
    java 里面 false 和 null 也不一样啊 ,虽然基本类型没法直接比
    secondwtq
    secondwtq
    May 3, 2018
    17
    吃着屎说 真香
    lmqdlr
    lmqdlr
    May 3, 2018 via Android
    18
    Python 是动态类型的强类型啊,跟 js 那种坑货不一样
    ltoddy
    ltoddy
    May 3, 2018
    19
    == 比较的时候,先调用__eq__()方法,然后如果没有的话,会再调用__hash__()方法,所以才会看到 False==0 返回 True 的结果。
    Arnie97
    Arnie97
    May 4, 2018 via Android
    20
    建议用 is 和 is not 来和 None 比较
    binux
    binux
    May 4, 2018
    21
    就是这么规定的,这么吧。
    markx
    markx
    May 4, 2018
    22
    因为是强类型语言。
    mingyun
    mingyun
    May 4, 2018❤️1
    23
    日了狗了

    >>> a='wtf'
    >>> b='wtf'
    >>> a is b
    True
    >>> c='wtf!'
    >>> d='wtf!'
    >>> c is d
    False
    xuc
    xuc
    May 4, 2018❤️1
    24
    @mingyun id(a) id(b) id(c) id(d) 看一下就明白了,intern 机制
    jy02201949
    jy02201949
    May 4, 2018
    25
    我不明白你们一整天用关公战秦琼有什么实战的意义
    John60676
    John60676
    OP
    May 4, 2018
    26
    @ltoddy bool 的父类是 int,且 True 的值为 1,False 的值为 0 吧,所以 False == 0 是 True
    jasonyang9
    jasonyang9
    May 4, 2018
    27
    一个小坑而已,多踩踩就好了
    SuT2i
    SuT2i
    May 4, 2018
    28
    @xuc
    @mingyun 谢谢老铁 学习了
    aaronzjw
    aaronzjw
    May 4, 2018
    29
    pyhton 的小坑
    if i and i < 0:
    do something
    ycz0926
    ycz0926
    May 4, 2018
    30
    类型不同,怎么比较呢?
    (。。其实觉得 python 这点有点丑陋)
    aaronzjw
    aaronzjw
    May 4, 2018
    31
    发错了,抱歉。有时候想要判断变量是否为 none 和变量为 0,这样会坑。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 89ms · UTC 02:41 · PVG 10:41 · LAX 18:41 · JFK 21:41
    ♥ Do have faith in what you're doing.