python - 与 Python 的 `in` 运算符相关的困惑
问题描述
我发现 Python 的in
操作员有奇怪的行为
d = {}
'k' in d == False # False!
我认为这是因为优先级:
('k' in d) == False # True, it's okay
'k' in (d == False) # Error, it's also okay
但是,那么计算以下表达式的优先级是什么?
d = {}
'k' in d == False
如果是因为错误的优先级,为什么它不会触发如下错误:
'k' in (d == False)
换句话说,这个表达式在 Python 的底层会发生什么?
'k' in d == False
解决方案
in
被认为是比较运算符,因此它受比较链接的影响。
'k' in d == False
相当于
'k' in d and d == False
因为两者in
都是==
比较运算符。
不过,您几乎不需要直接与布尔文字进行比较。这里的“正确”表达是'k' not in d
。
作为参考,这在 Python 文档6.10 下进行了描述。比较:
comparison ::= or_expr (comp_operator or_expr)* comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
和
比较可以任意链接,例如,x < y <= z 等价于 x < y 和 y <= z,除了 y 只计算一次(但在这两种情况下,当找到 x < y 时根本不计算 z是假的)。
推荐阅读
- reactjs - 键入一个 prop 以接受一个接口或另一个接口
- c++ - 模棱两可的偏特化和 enable_if_t
- javascript - 为什么时刻时区使用 webpack 4 和/或创建反应应用程序 4 使用更少的空间?
- javascript - 为什么每次我进行递归迭代时我的变量都会重新初始化为其原始值,但以某种方式保留新值
- google-chrome - 在 Chrome Extension Manifest V3 中导入外部库
- python - 将 Selenium WebElement 传递给 WebDriverWait
- swift - 文本更改时将文本视图保存到 CoreData
- mysql - 无法从 EC2 实例连接到 RDS
- neural-network - 如果我们从最后一层一次更新一个反向传播中的参数怎么办?
- node.js - Cookie 会话,使用秘密而不是密钥