'+='和'=+'有什么区别?

29

我有一个简单的代码,可以打印出整数1-10:

i = 0
while i < 10:
    i += 1
    print(i)

如果你只是在第三行修改一个运算符,它将会打印出无数个1的整数(我明白为什么会这样)。

为什么执行第二个程序时没有发生语法错误?如果赋值运算符后面跟着一个加法运算符,那么不会引发语法错误吗?

i = 0
while i < 10:
    i =+ 1
    print(i)

4
"i =+ 1"与"i = 1"是相同的,"+"在此处是一元运算符。 - Eli Sadoff
5个回答

65

i+=1 相当于 i=i+1,而 i=+1 只是表示 i=(+1)


9
OP似乎理解了。问题是为什么“+1”不是非法语法。 - tobias_k
2
@tobias_k 问题实际上是一个重复的问题。然而,题目中提出的问题 - 这是一个完全合理的单独问题 - 在这个答案中得到了回答。这不是一个很好的情况,它显示了 Stack Overflow 的弱点,主要是由 OP 实际想要回答的问题和人们注意到从“库”中缺失的问题驱动的。 - Karl Knechtel

7

i =+ 1 is the same as i = +1, or i = 1.


7

x=+1被视为:x=(+1)
x+=1被视为:x=x+1

有一些二元运算符,它们对其左操作数和右操作数进行操作(例如*乘法)。
还有一些一元运算符,它们只采用右操作数(例如~/!否定)。 有些运算符可以是一元和二元的。

在Python中,加号也可以作为右操作符就像减号一样。

Python文档:

一元-(减号)运算符产生其数字参数的否定。

一元+(加号)运算符不改变其数字参数。


6

分词器通常不需要空格,除非有必要消除歧义(例如,在变量名和语言关键字之间需要一个空格或某种形式的标点符号,以便识别关键字)。

因此,x=+yx =+ yx = +y 在所有情况下都是等效的,都调用一元的 + 运算符对 y 进行操作并将结果赋值给 x。虽然一元加运算符不常用,但仅仅因为它不常用并不意味着它不能被识别和接受。

相比之下,C/C++ 等语言中的 --> "运算符" 是另一个例子,人们寻找空格而分词器却忽略它们导致混淆


2
“!--” 也曾经在 javascript 中引起了一些混淆。 - Brendan Abel

0

没有语法错误,因为表达式i =+ 1i = (+1)相同,而+1是完全合法的。它是一元运算符,而不是加法运算符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接