python - 链式比较中的按位 '&' 运算符

标签 python comparison bitwise-operators

var = 86
print((var < 90) & (var >= 80))

打印True

但是为什么所有这些都打印False

print(var < 90 & var >= 80)
print(var < 90 & (var >= 80))
print((var < 90) & var >= 80)
print(var < 90 & True)

最佳答案

您应该使用 and运算符代替 bool 运算。

由于 python 支持链接关系运算符(即您可以使用 0 < var < 100 而不是 0 < var and var < 100 )并处理二元运算(即加法、减法、按位运算等)关系运算符之前对于运算符优先级,您发布的所有失败案例实际上都意味着其他事情。

  1. var < 90 & var >= 80相当于(var < 90 & var) and (90 & var >= 80)
  2. var < 90 & (var>=80)相当于var < 90 & True为此请看第 4 个案例。
  3. (var<90) & var>=80也类似于第 4 种情况(这解析为 True & var >= 80 然后将解析为 0 >= 80 )。
  4. var < 90 & True相当于var < (90 & True) . &的实现运算符旨在返回 0如果其中一个操作数不是整数(这是动态类型的另一个最大陷阱),这就是为什么所有这些类似的语句都解析为 var < 0 的原因这是错误的。

关于python - 链式比较中的按位 '&' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41390988/

相关文章:

python - 为什么operator模块没有逻辑或功能?

c++ - 正数和负数的位运算符

Java位操作: replacing nibble of hex

python - 使用 *args、**kwargs 和可选/默认参数调用 Python 函数

使用 ffprobe 对 NamedTemporaryFile 拒绝 Python 权限

Python UDP广播

javascript - 我可以使用三等号来比较 JavaScript 字符串吗?

python - 基于索引的 2 列 2 数据帧之间的差异

php - 根据值是否大于、小于或等于零显示不同的输出

performance - 可能使用并发/异步/并行方法比较 2 个数据集