首先,请注意我理解==
用于比较两个表达式,而=
用于为变量赋值。但是,python是一种语言要求极低的干净语言,这似乎是一个简单的操作员。此外,我不是要开始辩论或讨论,而是要了解是否有一些我缺少的东西可以提高我对编程的了解。
就像(在python中)我们不需要将变量声明为int或字符串,语言根据分配的值确定,为什么'if'语句不能简单地确定=
是比较而不是赋值?
另一个例子是python在其他语言中删除了许多{}和[]并简单地使用了缩进,因为缩进和使用大括号是多余的。在我看来,if foo == goo:
也是多余的。但也许我还没有意识到这一点。因此问题!
答案 0 :(得分:11)
一个非常简单的原因是python允许使用布尔表达式:
a = b == c
还有多项任务:
a = b = c
在第一种情况下,a
会被赋予布尔值*(True
或False
),具体取决于b
和c
是否相等。在第二种情况下,a
和b
最终会引用同一个对象(c
)。显然,你不能只用一个操作员来支持两者。
我认为你(原则上)只能在=
语句中重载if
(因为那里不允许赋值),但这会让人感到困惑 - 特别是来自{{{ 1}}其中an assignment is allowed in an if
statement. zen再次获胜(“明确比隐含更好”)。
C
的{{1}}方法(或a
的{{1}}如果前者返回__eq__
)返回的内容 - 对象返回一个布尔值,但少数不返回(b
是一个具有__eq__
的公共对象,例如返回另一个NotImplemented
。答案 1 :(得分:5)
两个运营商可以重叠。例如,考虑
a = b = c
将a
和b
设置为c
和
a = b == c
根据a
和True
是否相同,将False
设置为b
或c
。
更一般地说,Python试图避免语法甚至可能模糊不清以使解析器更简单。即使上面的歧义可以解决,也会涉及添加一些特殊情况,并且通常会增加解析器的复杂性。让两个操作员分开整齐地避免这个问题。