freeCodeCamp/guide/chinese/python/comparisons/index.md

84 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Python Comparisons
localeTitle: Python比较
---
[Python文档 - 比较](https://docs.python.org/3/library/stdtypes.html#comparisons)
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中创建一个列表。
```python
myListA = [1,2,3]
```
接下来,创建该列表的副本。
```python
myListB = myListA
```
如果我们使用'=='运算符或'is'运算符,两者都将产生**True**输出。
```python
>>> myListA == myListB # both lists contains similar elements
True
>>> myListB is myListA # myListB contains the same elements
True
```
这是因为myListAmyListB都指向同一个列表变量,我在Python程序的开头定义了该变量。两个列表在身份和内容上完全相同。
但是,如果我现在创建一个新列表怎么办?
```python
myListC = [1,2,3]
```
执行`==`运算符仍然显示两个列表在内容方面是相同的。
```python
>>> myListA == myListC
True
```
但是,执行`is`运算符现在将生成`False`输出。这是因为myListAmyListC是两个不同的变量,尽管包含相同的数据。即使它们看起来一样,但它们是**不同的**
```python
>>> myListA is myListC
False # both lists have different reference
```
总结一下:
* 如果两个变量都指向同一个引用, `is`表达式输出为`True`
* 如果两个变量包含相同的数据,则`==`表达式输出`True`