首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   John60676 · 296 天前 · 3449 次点击
    这是一个创建于 296 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有没有人能解答一下

    第 1 条附言  ·  295 天前
    感谢楼下几位同学认真的回复,我自己又查了一下相关资料。感觉下面的文档的解释更加合理

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



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

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

    >>> a='wtf'
    >>> b='wtf'
    >>> a is b
    True
    >>> c='wtf!'
    >>> d='wtf!'
    >>> c is d
    False
        24
    xuc   295 天前   ♥ 1
    @mingyun id(a) id(b) id(c) id(d) 看一下就明白了,intern 机制
        25
    jy02201949   295 天前
    我不明白你们一整天用关公战秦琼有什么实战的意义
        26
    John60676   295 天前
    @ltoddy bool 的父类是 int,且 True 的值为 1,False 的值为 0 吧,所以 False == 0 是 True
        27
    jasonyang9   295 天前
    一个小坑而已,多踩踩就好了
        28
    SuT2i   295 天前
    @xuc
    @mingyun 谢谢老铁 学习了
        29
    aaronzjw   295 天前
    pyhton 的小坑
    if i and i < 0:
    do something
        30
    ycz0926   295 天前
    类型不同,怎么比较呢?
    (。。其实觉得 python 这点有点丑陋)
        31
    aaronzjw   295 天前
    发错了,抱歉。有时候想要判断变量是否为 none 和变量为 0,这样会坑。。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1503 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 17:09 · PVG 01:09 · LAX 09:09 · JFK 12:09
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1