Python逻辑运算符
Python逻辑运算符使我们能够在布尔值之间执行逻辑AND,OR和NOT运算。
在本文中,我们将更详细地研究逻辑运算符的执行。
Python逻辑运算符
Python中有三个逻辑运算符。
Logical Operator | Description | Simple Example |
---|---|---|
and | Logical AND Operator | flag = True and True = True |
or | Logical OR Operator | flag = False or True = True |
not | Logical NOT Operator | flag = 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 __()函数来为对象布尔值定义自定义规则。