3.4 KiB
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