Python中的布尔表达式

时间:2016-01-01 18:31:07

标签: python boolean-expression

我正在运行的Python脚本测试两个条件的结合,其中一个很容易验证,另一个很难。假设我在Python中将其写为easy_boole and hard_boole。解释员是否会先检查easy_boole然后再返回False easy_boole == False?解释器是否经过优化以尽快解决这些类型的语句?

4 个答案:

答案 0 :(得分:3)

是的,andor都是所谓的短路运营商。一旦值为假,and表达式的评估就会结束,只要值真实,or表达式的评估就会结束。

您可以找到相关文档here

以下是一段代码,您可以自己观察此行为:

def fib(n):
    if n <= 2:
        return 1
    return fib(n-1) + fib(n-2)

print(False and fib(100)) # prints False immediately
print(True and fib(100)) # takes very, very long
print(fib(100) and False) # takes very, very long

因此,请务必使用easy_boole and hard_boole

答案 1 :(得分:3)

打开REPL并尝试:

>>> False and 1 / 0
False

>> True or 1 / 0
True

>>> False or 1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

这意味着Python确实懒惰地评估布尔语句。

P.S。这是一个duplicate

答案 2 :(得分:2)

来自Python Documentation

  

表达式x和y首先计算x;如果x为假,则其值为   回;否则,评估y并得到结果值   返回。

只要xFalse,表达式就会被评估为False

答案 3 :(得分:0)

是的,python懒惰地评估if语句。例如,在以下代码中:

if f() and g():
    print("GOOD")
else:
    print("BAD")

Python解释器将首先检查f()语句,如果f()为False,它将立即跳转到else语句。