比较值与'='时,'=='运算符的用途是什么?

时间:2013-04-03 02:42:16

标签: python

首先,请注意我理解==用于比较两个表达式,而=用于为变量赋值。但是,python是一种语言要求极低的干净语言,这似乎是一个简单的操作员。此外,我不是要开始辩论或讨论,而是要了解是否有一些我缺少的东西可以提高我对编程的了解。

就像(在python中)我们不需要将变量声明为int或字符串,语言根据分配的值确定,为什么'if'语句不能简单地确定=是比较而不是赋值?

另一个例子是python在其他语言中删除了许多{}和[]并简单地使用了缩进,因为缩进和使用大括号是多余的。在我看来,if foo == goo:也是多余的。但也许我还没有意识到这一点。因此问题!

2 个答案:

答案 0 :(得分:11)

一个非常简单的原因是python允许使用布尔表达式:

a = b == c

还有多项任务:

a = b = c

在第一种情况下,a会被赋予布尔值*(TrueFalse),具体取决于bc是否相等。在第二种情况下,ab最终会引用同一个对象(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

ab设置为c

a = b == c

根据aTrue是否相同,将False设置为bc


更一般地说,Python试图避免语法甚至可能模糊不清以使解析器更简单。即使上面的歧义可以解决,也会涉及添加一些特殊情况,并且通常会增加解析器的复杂性。让两个操作员分开整齐地避免这个问题。