使用算术运算符将None与内置类型进行比较?

发布于 2021-01-29 17:39:44

Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> None > 0
False
>>> None == 0
False
>>> None < 0
True
  • None使用算术运算符比较是否为内置类型(在这种情况下为整数)进行了定义?
  • 语言规范的前两个比较部分和第三个比较部分之间的区别(Python的规范-您一定是在开玩笑))还是CPython的实现细节?
关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您真正可以使用的唯一有意义的比较Noneif obj is None:(或if obj is not None:)。

    出于各种原因,已从Python 3中删除了不同类型之间的比较-它们是常见的错误来源,并导致混乱。例如

    >>> "3" < 4
    False
    

    在Python 3中,TypeError比较不同类型的值(例如strvs.int或anys vs.)时会得到a None

    >>> None < 0
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unorderable types: NoneType() < int()
    

    (在试图确定两个值中的哪个较大/较小的意义上,我的意思是“比较”。对相等性的比较是可以的-False如果两个对象的类型不同,它将始终返回。)

    我没有在文档中找到对此的参考,但是在学习Python,第4版中,Mark
    Lutz在第204页上写道:

    […]比较不同类型的对象(例如,字符串和列表)的工作-
    该语言在不同类型之间定义了固定的顺序,这是确定性的,即使在美学上也不令人满意。也就是说,排序基于所涉及类型的名称:例如,所有整数都小于所有字符串,因为"int"小于
    "str"



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看