等值、大小比较 在python中,只要两个对象的类型相同,且它们是内置类型(字典除外),那么这两个对象就能进行比较。关键词:内置类型、同类型。所以,两个对象如果类型不同,就没法比较,比如数值类型的数值不能和字符串类型的数值或字母比较。 == != < <= > >= 例如,下面的比较全部返回True。 bool(1 < 2) bool('a' < 'c') bool('A' < 'a') # 字符大小:A < Z < a < zbool([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 == NoneTrue>>> None != NoneFalse>>> None <= NoneTraceback (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 < 3False>>> (1==2) < 3True 连续比较是一种比较语法,它不仅限于数值的连续比较,还支持其它类型。比如: >>> "ac" > "ab" < "ad"True is 和 == 有两种比较数据对象python教程是否相等的方式:"=="和"is",它们的否定形式分别为"!="和"is not"。
is比较的是内存中的数据对象。例如: >>> a = 1000>>> b = 1000>>> a == bTrue>>> a is bFalse a和b在数值上是相等的,所以a == b返回True。但它们分别指向的内存中的数据对象1000,却不是同一个数据对象,所以a is b返回False。如下图,内存中有两个1000。 >>> a = 1000>>> b = a>>> a is bTrue 结果中a is b返回True,因为b = a是将a中保存的1000的地址赋值给b,使得b中也保存1000地地址。如下图,内存中只有一个1000,但是a和b都指向这个1000。 |
|