布尔运算符的Python优先级规则

时间:2016-09-07 04:34:29

标签: python boolean-expression short-circuiting operator-precedence

当我评估以下表达式时:

1或(1/0)和1

遵循什么规则(优先权,短路评估等)来获得答案

2 个答案:

答案 0 :(得分:2)

如果b为true-ish,

b or anything_else被定义为返回b,而不评估anything_else。由于您的第一个是真实的,因此您的1/0永远不会被评估,因此没有错误。 “true-ish”是指Python认为是真的任何值,而不仅仅是True布尔值。尝试使用True或[2]代替前1来表达我的意思。

答案 1 :(得分:1)

Python短路评估。在您的示例中,表达式

1 or (1/0) and 1

在第一个1完成评估并返回True

一个更简单的例子用于说明Python的短路评估。考虑表达式:

(1/0) or 1

这会在评估ZeroDivisionError时引发(1/0)例外。但表达式是:

1 or (1/0)

短路评估为True。由于子表达式(1/0)永远不会被评估,因此不会引发异常。