布尔运算符的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优先规则[重复]的主要内容,如果未能解决你的问题,请参考以下文章