3.4 KiB
title, localeTitle
| title | localeTitle |
|---|---|
| Python Comparisons | Python比较 |
Python中有八个比较操作。它们都具有相同的优先级(高于布尔操作的优先级)。比较可以任意链接;例如, x < y <= z等效于x < y and y <= z ,除了y仅被评估一次(但在两种情况下,当x < y被发现为假时,根本不评估z )。
此表总结了比较操作:
操作|含义
--------- | -----------------------
< |严格不足
<= |小于或等于 > |严格大于 >= |大于或等于 == |等于 != |不等于 is |对象身份
is not |否定了对象的身份
除了不同的数字类型之外,不同类型的对象永远不会相等。此外,某些类型(例如,函数对象)仅支持简并比较概念,其中该类型的任何两个对象都是不相等的。在将复数与另一个内置数值类型进行比较时,当对象具有无法比较的不同类型时,或者在没有定义的其他情况下, < , <= , >和>=运算符将引发TypeError异常排序。
除非类定义__eq__()方法,否则类的非相同实例通常会比较为不相等。
除非该类定义了足够多的方法__lt__() , __le__() , __gt__()和__ge__() ,否则不能对相同类的其他实例或其他类型的对象排序类的实例(一般情况下) , __lt__()和__eq__()就足够了,如果你想要比较运算符的常规含义)。
is和is not运营商的行为无法定制;它们也可以应用于任何两个对象,并且永远不会引发异常。
我们还可以将<和>运算符链接在一起。例如, 3 < 4 < 5将返回True ,但3 < 4 > 5将不返回True 。我们也可以链接相等运算符。例如, 3 == 3 < 5将返回True但3 == 5 < 5将不返回True 。
平等比较 - “是”与“==”
在Python中,有两个比较运算符允许我们检查两个对象是否相等。 is运算符和==运算符。但是,他们之间有一个关键的区别!
'是'和'=='之间的关键区别可以概括为:
is用来比较认同==用于比较相等
例
首先,在Python中创建一个列表。
myListA = [1,2,3]
接下来,创建该列表的副本。
myListB = myListA
如果我们使用'=='运算符或'is'运算符,两者都将产生True输出。
>>> myListA == myListB # both lists contains similar elements
True
>>> myListB is myListA # myListB contains the same elements
True
这是因为myListA和myListB都指向同一个列表变量,我在Python程序的开头定义了该变量。两个列表在身份和内容上完全相同。
但是,如果我现在创建一个新列表怎么办?
myListC = [1,2,3]
执行==运算符仍然显示两个列表在内容方面是相同的。
>>> myListA == myListC
True
但是,执行is运算符现在将生成False输出。这是因为myListA和myListC是两个不同的变量,尽管包含相同的数据。即使它们看起来一样,但它们是不同的 。
>>> myListA is myListC
False # both lists have different reference
总结一下:
- 如果两个变量都指向同一个引用,
is表达式输出为True - 如果两个变量包含相同的数据,则
==表达式输出True