python - Python3:具有相同优先级的多个运算符
问题描述
我最近开始学习 Python。
我的朋友问我3 < 5 != True
评估到哪个值。
因为我之前有 javascript 和 c++ 的经验,所以我回答了False
. (我能够在两种语言中看到 false )
因为,具有相同优先级 ( comparison
) 的运算符从左到右工作。
所以3 < 5
首先评估它,它变成True
and True != True
is False
。
我相信这是正确的答案。
但事实证明并非如此。
我在我的电脑上运行了这个表达式,它说它是True
.
我错过了什么吗?还是 Python 以不同的方式评估具有相同优先级的运算符?
解决方案
表达式3 < 5 != True
被评估为:
(3 < 5) and (5 != True)
由于True == 1
,这相当于:
(3 < 5) and (5 != 1)
当然,这两个部分都评估为True
,因此您的结果是True
.
文档中描述了链式比较:
比较可以任意链接,例如,
x < y <= z
等价于x < y and y <= z
,除了y
只评估一次(但在两种情况下,当发现为假z
时根本不评估)。x < y
推荐阅读
- snmp - SNMP 陷阱消息将源和目标显示为未知
- ngrok - 如何让 ngrok 服务器永远运行?
- tensorflow - TensorFlow ssd-mobilenet-V2 训练似乎进展不顺利
- python - 为什么我可以使用布尔值作为列表索引?
- reactjs - 将渲染的组件存储在变量中
- python - 空行后获取值
- c# - c# 带括号的匿名类型声明
- python - 即使连接已经存在,同一个客户端试图从不同的端口连接到服务器?
- github - github,是否自动生成拉取请求以提升依赖版本总是安全的?
- regex - 我们如何编写正则表达式 (regex) 来识别具有单位的数量,例如“54.20 克”?