Python逻辑运算符

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

Python逻辑运算符使我们能够在布尔值之间执行逻辑AND,OR和NOT运算。
在本文中,我们将更详细地研究逻辑运算符的执行。

Python逻辑运算符

Python中有三个逻辑运算符。

Logical OperatorDescriptionSimple Example
andLogical AND Operatorflag = True and True = True
orLogical OR Operatorflag = False or True = True
notLogical NOT Operatorflag = not(False) = True

Python逻辑AND运算子

这是一个逻辑和运算符的简单示例。

x = 10
y = 20

if x > 0 and y > 0:
  print('Both x and y are positive numbers')

输出:x和y都是正数。

在执行逻辑运算之前,先对表达式求值。
因此,上述if条件类似于以下内容:

if (x > 0) and (y > 0):
  print('Both x and y are positive numbers')

在Python中,每个变量或者对象都有一个布尔值。
我们已经在Python bool()函数中对此进行了更详细的解释。

if x and y:
  print('Both x and y have boolean value as True')

输出:x和y的布尔值均为True,因为‘x’和‘y’len()函数将返回2,即> 0。

如果我们使用" and"运算符,并且第一个表达式的计算结果为" False",则不对其他表达式进行计算。

让我们通过定义一个自定义对象来确认上述声明。
Python使用__bool __()函数来获取对象的布尔值。

class Data:
  id = 0

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

  def __bool__(self):
      print('Data bool method called')
      return True if self.id > 0 else False

d1 = Data(-10)
d2 = Data(10)
if d1 and d2:
  print('Both d1 and d2 ids are positive')
else:
  print('Both d1 and d2 ids are not positive')

输出:

Data bool method called
At least one of d1 and d2 ids is negative

请注意,从print语句输出确认,仅调用一次__bool __()函数。

下图描述了逻辑和操作流程图。

Python逻辑和运算符流程图

您是否注意到单线退货声明?如果您对此感到困惑,请查看Python三元运算符。

Python逻辑或者运算符

让我们看一个逻辑OR运算符的简单示例。

x = 10
y = 20

if x > 0 or y > 0:
  print('At least one of x and y is positive number')

如果我们使用"或者"运算符,并且第一个表达式的计算结果为" True",则不对其他表达式进行计算。

让我们用一个简单的代码片段来确认这一点。
我们将重用先前定义的Data类。

d1 = Data(10)
d2 = Data(20)

# The expressions are evaluated until it's required
if d1 or d2:
  print('At least one of d1 and d2 id is a positive number')
else:
  print('Both d1 and d2 id are negative')

输出:

Data bool method called
At least one of d1 and d2 id is a positive number

请注意,__bool __()方法仅被调用一次,并且由于其计算结果为" True",因此不会计算其他表达式。

让我们运行另一个示例,其中两个数据对象的布尔值都将返回" False"。

d1 = Data(-10)
d2 = Data(-20)

if d1 or d2:
  print('At least one of d1 and d2 id is a positive number')
else:
  print('Both d1 and d2 id are negative')

输出:

Data bool method called
Data bool method called
Both d1 and d2 id are negative

Python逻辑非运算符

这是一个非常简单的运算符,可用于单个布尔值。
如果布尔值是True,则not运算符将返回False,反之亦然。

让我们看一个简单的"非"运算符示例。

a = 37
if not (a % 3 == 0 or a % 4 == 0):
  print('37 is not divisible by either 3 or 4')

从左到右评估Python运算符

让我们看一个示例,其中有多个逻辑运算符。
我们不会混合使用不同类型的Python运算符,因此不会出现运算符优先级的情况,并且更容易解释输出。

我们还将覆盖__bool __()函数以显示" id"值。

def my_bool(data):
  print('Data bool method called, id =', data.id)
  return True if data.id > 0 else False

Data.__bool__ = my_bool

d1 = Data(10)
d2 = Data(-20)
d3 = Data(20)

# evaluated from left to right, confirmed from the __bool__() print statement
if d1 and d2 or d3:
  print('At least one of them have a positive id.')

输出:

Data bool method called, id = 10
Data bool method called, id = -20
Data bool method called, id = 20
At least one of them have a positive id.

注意,首先为d1计算布尔值,从而确认执行是从左到右进行的。

逻辑运算符可用于任何自定义对象吗?

在Python中,每个对象都有一个布尔值。
因此,逻辑运算符也可以使用任何自定义对象。
但是,我们可以实现__bool __()函数来为对象布尔值定义自定义规则。