Python比较运算符

时间:2020-02-23 14:42:32  来源:igfitidea点击:

Python比较运算符用于比较两个对象。
返回的输出是布尔值-True或者False。

Python比较运算符

Python中有6种类型的比较运算符。

Comparison OperatorDescriptionExample
==returns True if two operands are equal, otherwise False.a == b
!=returns True if two operands are not equal, otherwise False.a != b
>returns True if left operand is greater than the right operand, otherwise False.a > b
<returns True if left operand is smaller than the right operand, otherwise False.a < b
>=returns True if left operand is greater than or equal to the right operand, otherwise False.a > b
<=returns True if left operand is smaller than or equal to the right operand, otherwise False.a < b

Python比较运算符示例

让我们看一个简单的示例,将比较运算符与原始数据类型(例如整数)一起使用。

>>> a = 10
>>> b = 10
>>> c = 20
>>> 
>>> a == b
True
>>> a != b
False
>>> c > a
True
>>> c < a
False
>>> c <= 20
True
>>> c >= 20
True
>>>

带字符串的Python比较运算符

该字符串是Python编程中的一个对象。
让我们看看比较运算符是否适用于字符串。

>>> # string comparison
>>> s1 = 'a'
>>> s2 = 'a'
>>> s3 = 'b'
>>> s1 == s2
True
>>> s1 != s2
False
>>> s1 > s3
False
>>> s1 < s3
True
>>> s1 <= s2
True
>>> s1 >= s2
True
>>>

Python比较运算符–字符串

那么这是否意味着比较运算符将可以与任何python对象一起使用?

让我们通过创建一个自定义类来进行检查。

>>> class Data:
	pass

>>> d1 = Data()
>>> d2 = Data()
>>> d1 == d2
False
>>> d1 != d2
True
>>> d1 > d2
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
  d1 > d2
TypeError: '>' 不支持 between instances of 'Data' and 'Data'
>>> d1 < d2
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
  d1 < d2
TypeError: '<' 不支持 between instances of 'Data' and 'Data'
>>> d1 <= d2
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
  d1 <= d2
TypeError: '<=' 不支持 between instances of 'Data' and 'Data'
>>> d1 >= d2
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
  d1 >= d2
TypeError: '>=' 不支持 between instances of 'Data' and 'Data'
>>> 
>>>

Python比较运算符重载错误

为什么等于和不等于运算符起作用,而其他运算符却不起作用?

这是因为"对象"是Python中每个类的基础。
对象提供了用于等于和不等于运算符的函数的实现。

比较运算符的功能

这是比较运算符使用的功能列表。
因此,如果希望比较运算符与自定义对象一起使用,则需要为其提供一个实现。

Comparison OperatorFunction
==__eq__(self, other)
!=__ne__(self, other)
>__gt__(self, other)
<__lt__(self, other)
>=__ge__(self, other)
<=__le__(self, other)

Python比较运算符重载

让我们看一个在自定义对象中重载比较运算符的示例。

# Learn how to override comparison operators for custom objects

class Data:
  id = 0

  def __init__(self, i):
      self.id = i

  def __eq__(self, other):
      print('== operator overloaded')
      if isinstance(other, Data):
          return True if self.id == other.id else False
      else:
          return False

  def __ne__(self, other):
      print('!= operator overloaded')
      if isinstance(other, Data):
          return True if self.id != other.id else False
      else:
          return False

  def __gt__(self, other):
      print('> operator overloaded')
      if isinstance(other, Data):
          return True if self.id > other.id else False
      else:
          return False

  def __lt__(self, other):
      print('< operator overloaded')
      if isinstance(other, Data):
          return True if self.id < other.id else False
      else:
          return False

  def __le__(self, other):
      print('<= operator overloaded')
      if isinstance(other, Data):
          return True if self.id <= other.id else False
      else:
          return False

  def __ge__(self, other):
      print('>= operator overloaded')
      if isinstance(other, Data):
          return True if self.id >= other.id else False
      else:
          return False

d1 = Data(10)
d2 = Data(7)

print(f'd1 == d2 = {d1 == d2}')
print(f'd1 != d2 = {d1 != d2}')
print(f'd1 > d2 = {d1 > d2}')
print(f'd1 < d2 = {d1 < d2}')
print(f'd1 <= d2 = {d1 <= d2}')
print(f'd1 >= d2 = {d1 >= d2}')

输出:

== operator overloaded
d1 == d2 = False
!= operator overloaded
d1 != d2 = True
> operator overloaded
d1 > d2 = True
< operator overloaded
d1 < d2 = False
<= operator overloaded
d1 <= d2 = False
>= operator overloaded
d1 >= d2 = True