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
)并处理二元运算(即加法、减法、按位运算等)在关系运算符之前对于运算符优先级,您发布的所有失败案例实际上都意味着其他事情。
-
var < 90 & var >= 80
相当于(var < 90 & var) and (90 & var >= 80)
-
var < 90 & (var>=80)
相当于var < 90 & True
为此请看第 4 个案例。 -
(var<90) & var>=80
也类似于第 4 种情况(这解析为True & var >= 80
然后将解析为0 >= 80
)。 -
var < 90 & True
相当于var < (90 & True)
.&
的实现运算符旨在返回0
如果其中一个操作数不是整数(这是动态类型的另一个最大陷阱),这就是为什么所有这些类似的语句都解析为var < 0
的原因这是错误的。
关于python - 链式比较中的按位 '&' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41390988/