布尔运算符的Python优先规则[重复]

Posted

技术标签:

【中文标题】布尔运算符的Python优先规则[重复]【英文标题】:Python precedence rules for boolean operators [duplicate] 【发布时间】:2017-01-14 15:13:44 【问题描述】:

当我评估以下表达式时:

1 或 (1/0) 和 1

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

【问题讨论】:

这个问题还没有被问到。在python中提到NOT AND & OR优先级的问题并没有解决这里发生的短路评估。 【参考方案1】:

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

【讨论】:

可以发布包含此信息的官方文档的链接吗? 对于 Python 2:docs.python.org/2/reference/expressions.html#boolean-operations【参考方案2】:

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

1 or (1/0) and 1

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

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

(1/0) or 1

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

1 or (1/0)

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

【讨论】:

以上是关于布尔运算符的Python优先规则[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python运算符的优先级

Python 运算符优先级 运算符

python学习之运算表达式优先级

7. Python运算符之逻辑成员身份运算符及优先级

在 Python 中实现“规则引擎”

Python之布尔运算符