3小时入门Python——第十四课布尔逻辑

  |   0 评论   |   0 浏览   |   给我丶鼓励

布尔型

布尔类型,或者简单地 bool,是仅具有两个可能的值的特殊数据类型:TrueFalse。在 Python 中,布尔值的名称以大写字母开头。

在编程语言中,布尔类型或逻辑类型是表示只有两种相反状态(例如_打开_或_关闭_,_是_或_否_等)的一种常见方式 。

如果您正在编写跟踪门 bool 的打开状态的应用程序,那么会发现使用它来存储当前的门状态是很自然的。

is_open = True
is_closed = False
 
print(is_open)    # True
print(is_closed)  # False

布尔运算

有三个内置的布尔运算符在 Python: andornot。前两个是二进制运算符,这意味着它们需要两个参数。not 是一 元运算符,它始终应用于单个操作数。首先,让我们看一下这些应用于布尔值的运算符。

  • 并且是二进制运算符,它接受两个参数,True 如果两个参数都为 true,则返回,否则返回 False。a = True and True # True b = True and False # False c = False and False # False d = False and True # False
  • 或是二进制运算符,True 如果至少一个参数为 true,则返回,否则返回 False。a = True or True # True b = True or False # True c = False or False # False d = False or True # True
  • not 是一元运算符,它会反转其参数的布尔值。to_be = True # to_be is True not_to_be = not to_be # not_to_be is False

布尔运算的优先级

逻辑运算符的优先级不同,它影响评估的顺序。下面是运营商在他们的优先级顺序:notandor。因此,not 首先考虑的,不是 and 最后 or。考虑到这一点,请考虑以下表达式:

print(False or not False)  # True

首先,对零件 not False 进行评估,评估后,剩下 False or True。这导致 True,如果你还记得上一节。

虽然只用布尔值处理似乎是显而易见的,逻辑运算符的优先级将是非常重要的,当你开始用所谓的工作记忆 truthyfalsy 值。

真实和虚假的价值观

尽管 Python 具有布尔数据类型,但我们经常想在逻辑上下文中使用非布尔值。Python 使您可以测试几乎所有对象的真实性。与逻辑运算符一起使用时,非布尔类型的值(例如整数或字符串)称为 truefalsy。这取决于它们是否被解释为 TrueFalse

以下值 False 在 Python 中评估为 :

  • 常数定义为假:NoneFalse
  • 任何数值类型的零:00.0
  • 空序列和容器:""[]{}

一般而言,其他任何评估 True。这是几个示例:

print(0.0 or False)  # False
print(False and "")  # False

一般来说,and 并且 or 可以采用可以测试布尔值的任何参数。

现在,我们可以更清楚地说明运算符优先级的不同:

# `and` has a higher priority than `or`
truthy_integer = False or 5 and 100  # 100

同样,让我们​​将上面的表达式分成几部分。由于运算符 and 的优先级高于 or,因此我们应该看一下该 5 and 100 部分。双方 1005 恰巧是 truthy 值,因此该操作将返回 100。您以前从未见过,所以很自然地想知道为什么我们这里有一个数字而不是 True 值。我们很快将介绍这个令人惊讶的事实。回到原始表达式,您可以看到最后一部分 False or 100 做的完全一样,返回 100 而不是 True

运算符 orand 返回其操作数之一,不一定是布尔类型。尽管如此, not 始终返回布尔值。

下面是另一个棘手的示例:

tricky = not (False or '')  # True

一对括号是指定操作执行顺序的一种方式。因此,我们首先评估表达式的这一部分:False or ''。此操作数 '' 求值 Falseor 返回此空字符串。由于封闭表达式的结果取反,因此我们得出 Truenot '' 与相同 True。为什么我们没有得到非空字符串?在 not 操作创建一个新的值,默认情况下具有布尔类型。因此,如前所述,一元运算符始终返回逻辑值。

短路评估

最后要提到的是 Python 中的逻辑运算符是短路的。这就是为什么它们也被称为 lazy。这意味着仅当第一个操作数不足以评估整个表达式时,才对此类表达式中的第二个操作数求值。

  • x and y 退货 X 如果 X 虚假 否则,它将评估并返回ÿ。
  • x or y 退货 X 如果 X 是真的 否则,它将评估并返回ÿ。

例如:

# division is never evaluated, because the first argument is True
lazy_or = True or (1 / 0)  # True
 
# division is never evaluated, because the first argument is False
lazy_and = False and (1 / 0)  # False

这些是 Python 中布尔值和逻辑运算的基础。从一开始就认识他们绝对是一件好事!


标题:3小时入门Python——第十四课布尔逻辑
作者:给我丶鼓励
地址:https://blog.doiduoyi.com/articles/1592718151039.html

评论

发表评论