python - Python - 为什么'&'和'and'运算符提供不同的结果,尽管评估条件相同的结果
问题描述
我刚开始学习 Python。我遇到了以下问题。如下所示,我正在使用“&”运算符编写相同的语句,然后使用“and”运算符。尽管这两个运算符都将“if”条件评估为相同的布尔输出“True”(True 'and' True 是 True并且True & True 是 True),但为什么结果不同?为什么'&'给出错误的答案?感谢任何澄清。
a = 70
b = 40
c = 60
x = a if a>b and a>c else b if b>c else c
print('Max value with "and":', x)
x = a if a>b & a>c else b if b>c else c
print('Max value with "ampersand":', x)
输出是:
“和”的最大值:70
“&”的最大值:60
解决方案
为什么结果不同?为什么'&'给出错误的答案?
因为它们是完全不同的运算符,具有完全不同的语义和完全不同的优先级:&
apply before>
哪个 apply before and
。
所以当你写a > b and a > c
它时,它被解析为(a > b) and (a > c)
.
但是当你写的时候a > b & a > c
,它被解析为a > (b & a) > c
.
还有一个不同之处在这里不相关,但在其他上下文中会成为一个因素:and
(and or
) 是惰性运算符,这意味着它们将评估左操作数,然后做他们的事情,然后才评估第二个操作数。&
然而,它是一个普通的“急切”运算符,它评估两个操作数,然后才应用它所做的任何事情。
最后,这当然是最大的区别:and
适用于所有内容并且不可覆盖;&
仅适用于专门支持它的类型,并执行其定义的任何操作(对于整数,它是按位与,但对于集合,它是交集)。
推荐阅读
- javascript - Vuejs 在多个组件之间移动数据
- go - golang 中的 len() 线程安全吗?
- javascript - 使用jquery为多个元素制作交错淡入淡出循环
- nuxt.js - 为什么我必须在我的 Nuxt.js 插件中显式调用 jquery 和 bootstrap,当它在供应商中全局加载时?
- c# - 如何从 Windows.Form 调用 UserControl 的方法
- python-3.x - Python 3.x - 如何使用请求补丁更新 Google Drive 上的 CSV 文件
- javascript - ReactJS 教程井字游戏
- python - 将项目附加到另一个文件中的列表 - Python
- shopware - 如何显示博客文章中的所有图像
- android - RXAndroid 编写嵌套订阅的更好方法