【发布时间】:2017-01-14 15:13:44
【问题描述】:
当我评估以下表达式时:
1 或 (1/0) 和 1
遵循什么规则(优先级、短路评估等)来获得答案
【问题讨论】:
-
这个问题还没有被问到。在python中提到NOT AND & OR优先级的问题并没有解决这里发生的短路评估。
标签: python boolean-expression short-circuiting operator-precedence
当我评估以下表达式时:
1 或 (1/0) 和 1
遵循什么规则(优先级、短路评估等)来获得答案
【问题讨论】:
标签: python boolean-expression short-circuiting operator-precedence
b or anything_else 定义为在 b 为真时返回 b,而不评估任何其他内容。由于您的第一个 1 是真实的,因此您的 1/0 永远不会被评估,因此没有错误。我所说的“true-ish”是指 Python 认为是真的任何值,而不仅仅是 True 布尔值。尝试用 True 或 [2] 代替第一个 1 来表达你的意思。
【讨论】:
Python 短路评估。在您的示例中,表达式
1 or (1/0) and 1
在第一个1 处完成评估并返回True。
一个更简单的示例用于说明 Python 的短路评估。考虑表达式:
(1/0) or 1
这会在评估 (1/0) 时引发 ZeroDivisionError 异常。但是表达式:
1 or (1/0)
短路计算结果为True。由于子表达式 (1/0) 永远不会被评估,因此不会引发异常。
【讨论】: