首先,请注意,我理解它==
用于比较两个表达式,而=
用于为变量赋值。然而,python 是一种语法要求极低的简洁语言,这似乎是一个容易被砍掉的运算符。此外,我并不是要开始辩论或讨论,而是要了解我是否缺少某些东西来提高我的编程知识。
就像(在 python 中)我们不需要将变量声明为 int 或字符串,并且语言根据分配的值来确定这一点,为什么 'if' 语句不简单地确定它=
是一个比较,不是作业?
另一个例子是python去掉了其他语言中的很多{}和[],只使用了缩进,因为缩进和使用大括号是多余的。在我看来,这if foo == goo:
也是多余的。但也许有些事情我还没有意识到。因此问题!
问问题
164 次
2 回答
11
一个非常简单的原因是 python 允许布尔表达式:
a = b == c
以及多重分配:
a = b = c
在第一种情况下,根据和是否相等,a
分配一个布尔值*(True
或)。在第二种情况下,最终引用同一个对象 ( )。显然,您不能仅使用一个运算符来支持两者。False
b
c
a
b
c
我想你可以(原则上)=
只在if
语句中重载(因为那里不允许赋值),但这会让人感到困惑——特别是对于来自语句中允许赋值C
的地方的人。 禅再次获胜(“显式胜于隐式”)。if
- 它实际上不必是布尔值。它实际上是
a
'__eq__
方法返回的任何内容(或者b
' ,__eq__
如果前者返回NotImplemented
)——大多数对象返回一个布尔值,但少数不返回(例如numpy.ndarray
,一个常见的对象有一个__eq__
返回另一个ndarray
的对象)。
于 2013-04-03T02:46:33.803 回答
5
这两个运算符可以重叠。例如,考虑
a = b = c
将a
and设置b
为c
, 和
a = b == c
它设置a
为要么True
或False
基于是否b
和c
相等。
更一般地说,Python 试图避免甚至可能模棱两可的语法,以使解析器更简单。即使可以解决上述歧义,也将涉及添加许多特殊情况,并且通常会增加解析器的复杂性。将两个运算符分开整齐地避免了这个问题。
于 2013-04-03T02:47:08.207 回答