5

首先,请注意,我理解它==用于比较两个表达式,而=用于为变量赋值。然而,python 是一种语法要求极低的简洁语言,这似乎是一个容易被砍掉的运算符。此外,我并不是要开始辩论或讨论,而是要了解我是否缺少某些东西来提高我的编程知识。

就像(在 python 中)我们不需要将变量声明为 int 或字符串,并且语言根据分配的值来确定这一点,为什么 'if' 语句不简单地确定它=是一个比较,不是作业?

另一个例子是python去掉了其他语言中的很多{}和[],只使用了缩进,因为缩进和使用大括号是多余的。在我看来,这if foo == goo:也是多余的。但也许有些事情我还没有意识到。因此问题!

4

2 回答 2

11

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

a = b == c

以及多重分配:

a = b = c

在第一种情况下,根据和是否相等,a分配一个布尔值*(True或)。在第二种情况下,最终引用同一个对象 ( )。显然,您不能仅使用一个运算符来支持两者。Falsebcabc

我想你可以(原则上)=只在if语句中重载(因为那里不允许赋值),但这会让人感到困惑——特别是对于来自语句允许赋值C的地方的人 禅再次获胜(“显式胜于隐式”)。if


  • 它实际上不必是布尔值。它实际上是a'__eq__方法返回的任何内容(或者b' ,__eq__如果前者返回NotImplemented)——大多数对象返回一个布尔值,但少数不返回(例如numpy.ndarray,一个常见的对象有一个__eq__返回另一个ndarray的对象)。
于 2013-04-03T02:46:33.803 回答
5

这两个运算符可以重叠。例如,考虑

a = b = c

aand设置bc, 和

a = b == c

它设置a为要么TrueFalse基于是否bc相等。


更一般地说,Python 试图避免甚至可能模棱两可的语法,以使解析器更简单。即使可以解决上述歧义,也将涉及添加许多特殊情况,并且通常会增加解析器的复杂性。将两个运算符分开整齐地避免了这个问题。

于 2013-04-03T02:47:08.207 回答