• 对python中等值和大小比较


    等值、大小比较

    在python中,只要两个对象的类型相同,且它们是内置类型(字典除外),那么这两个对象就能进行比较。关键词:内置类型、同类型。所以,两个对象如果类型不同,就没法比较,比如数值类型的数值不能和字符串类型的数值或字母比较。
    对于python中的等值、不等值、大小比较的规则为何如此,以后学了Class的运算符重载,自然就会知道。
    其实自定义的类型(python 3.x中类Class就是类型)也可以进行比较,只不过要对类的比较操作符进行运算符重载。这些以后再说,这里先看内置类型的比较。
    比较操作符有:

    ==  !=  <  <=  >  >=
    

    例如,下面的比较全部返回True。

    bool(1 < 2)
    bool('a' < 'c')
    bool('A' < 'a')    # 字符大小:A < Z < a < z
    
    bool([1,2,2] < [1,2,3])
    bool((1,2,2) < (1,2,3))
    bool({1,2,2} < {1,2,3})
    

    python中同类型的内置类型对象(字典除外),都是从左开始,一个一个元素向后比较,就算中间遇到嵌套的容器结构(如list/tuple/Set),也会递归到嵌套的结构中去一个个比较。

    >>> bool([1,2,[3,3]] < [1,2,[3,4]])
    True
    

    注意,None对象只能参与等值和不等值比较,不能参与大小比较。

    >>> None == None
    True
    >>> None != None
    False
    >>> None <= None
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: '<=' not supported between instances of 'NoneType' and 'NoneType'
    

    python支持连续比较,连续比较时等价于使用and运算。例如:

    a < b < c    等价于  a < b and b < c
    a < b > c    等价于  a < b and b > c
    a == b < c   等价于  a == b and b < c
    

    一定要注意连续比较时的逻辑。例如1 == 2 < 3 返回False,但它等价于 1 == 2 and 2 < 3,而不是先评估1==2得到False,再将比较的结果与后面的做比较,即等价于False < 3,这意味着0<3,这实际上是返回True的。

    >>> 1 == 2 < 3
    False
    
    >>> (1==2) < 3
    True
    

    连续比较是一种比较语法,它不仅限于数值的连续比较,还支持其它类型。比如:

    >>> "ac" > "ab" < "ad"
    True
    

    is 和 ==

    有两种比较数据对象是否相等的方式:"=="和"is",它们的否定形式分别为"!="和"is not"。
    它们都是比较表达式,但却是完全不同的比较方式:

    • " =="和"!="符号比较的是数据的值是否相等、相同
    • "is"比较的是两个数据对象在内存中是否是同一个数据对象。换句话说,比较的是内存地址
      等号比较很容易理解,只要值相等就为True,否则为False。

    is比较的是内存中的数据对象。例如:

    >>> a = 1000
    >>> b = 1000
    >>> a == b
    True
    >>> a is b
    False
    

    a和b在数值上是相等的,所以a == b返回True。但它们分别指向的内存中的数据对象1000,却不是同一个数据对象,所以a is b返回False。如下图,内存中有两个1000。
    在这里插入图片描述
    如果是下面这种情况:

    >>> a = 1000
    >>> b = a
    >>> a is b
    True
    

    结果中a is b返回True,因为b = a是将a中保存的1000的地址赋值给b,使得b中也保存1000地地址。如下图,内存中只有一个1000,但是a和b都指向这个1000。
    在这里插入图片描述
    is测试还有些特殊情况,另外,关于b = a为什么赋值的是a中保存的地址,这里不对此展开描述

  • 相关阅读:
    JDK、JRE、JVM的区别联系
    1.1 计算机基础知识 —— 二进制
    java--面试中遇到的各种比较区别
    springMVC 运行流程
    算法--常用排序和查找
    Java面试问题总结
    dpkg:error错误求解:——重复文件触发关注
    memcpy实现
    Palindrome Number
    no matching function for call to 'sort(...),
  • 原文地址:https://www.cnblogs.com/djdjdj123/p/11831397.html
Copyright © 2020-2023  润新知