当前位置: 首页 > 面试题库 >

Python布尔表达式和或

宇文学博
2023-03-14
问题内容

在python中,如果您编写类似

foo==bar and spam or eggs

如果布尔语句为true,则python似乎返回垃圾邮件,否则返回egg。有人可以解释这种行为吗?为什么表达式不像一个长布尔值那样被求值?

编辑:具体来说,我试图弄清楚为什么该表达式的结果返回“ spam”或“ eggs”的机制。


问题答案:

运算符andor短路,这意味着如果仅从对第一个操作数求值就可以得出表达式的结果,则不对第二个操作数求值。例如,如果您具有表达式a or b并且a计算结果为true,那么不管什么都没关系b,表达式的结果为true,因此b不进行计算。实际上,它们的工作方式如下:

  • a and b:如果a为假,则不评估b并返回a,否则返回b。
  • a or b:如果a为真,则不评估b并返回a,否则返回b。

Falsey和Truey表示在布尔上下文中评估为false或true的值。

但是,在没有更好的选择的时候,这个和/或惯用语是有用的,但是现在有了更好的方法:

spam if foo==bar else eggs

和/或惯用语的问题(除了使初学者感到困惑之外)是,如果条件为真,但垃圾邮件的计算结果为假值(例如,空字符串),则会给出错误的结果。因此,您应该避免这种情况。



 类似资料:
  • 问题内容: 对象在Python中评估的真值是多少? 相关问题 Python中对象的布尔值:有关覆盖对象评估方式的讨论 问题答案: 可以测试任何对象的真值,以在if或while条件中使用或用作以下布尔运算的操作数。以下值为“假”: 没有 假 任何数值类型的零,例如,,,。 任何空序列,例如,,。 任何空映射,例如。 用户定义的类的实例,如果该类定义了或方法,则该方法返回整数0或bool value时

  • 我开始学习布尔表达式。我正试图找出以下问题: 假设age1、age2和age3是int变量,假设答案是布尔变量。编写一个表达式,当age1小于或等于age2并且age2小于或等于age3时,该表达式将答案指定为true。否则答案应为false。 我已经尝试了一些东西,但对Java来说还是比较陌生的。我能把答案打印出来,但我的数字还是有问题。 这是错误的: 我只是不知道如何解决这个问题,或者代码中到

  • 我有两个实体:类别和具有一对多关系的产品。 如果价格大于100,我如何按产品数量订购类别?类似(这不起作用):

  • 问题内容: 所以我有一个关于考试作业的问题,在这个作业中,我们有一堆布尔表达式,例如: 然后,我们应该编写布尔表达式的值。为此,我使用了三值逻辑,但是当您获得如下所示的布尔表达式时,这将如何应用: 或者 通过三值逻辑可以很容易地找到第一个,但是我如何找出另外两个。 我知道这是一个非常基本的问题,但是我对此仍然是陌生的。 提前致谢 问题答案: 您需要布尔值和的三相真值表: 该表是缩写,依赖于布尔逻辑

  • 本文向大家介绍OCaml 布尔表达式的求值,包括了OCaml 布尔表达式的求值的使用技巧和注意事项,需要的朋友参考一下 示例 我们定义布尔表达式的类型,其原子由字符串标识为 并可以通过oracle : string -> bool给出原子的值来评估这些表达式,如下所示: 了解该功能如何清晰易读。由于正确使用了模式匹配,因此读取此功能的程序员只需很少的时间即可确保其正确实现。

  • 你已经初步了解C语言如何处理循环,但是你可能不是很清楚布尔表达式i < argc是什么。在学习while循环之前,让我先来对布尔表达式做一些解释。 在C语言中,实际上没有真正的“布尔”类型,而是用一个整数来代替,0代表false,其它值代表true。上一个练习中表达式i < argc实际上值为1或者0,并不像Python是显式的Ture或者False。这是C语言更接近计算机工作方式的另一个例子,因