2016-11-16 361 views
2

所以我有一段簡單的代碼,打印出整數1-10:'+ ='和'= +'之間的區別?

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

然後,如果你只是改變周圍的一個操作員在3號線,它打印出的1個整數無限量(這是我理解它爲什麼這樣做)。爲什麼運行第二個程序時不會出現語法錯誤?如果賦值運算符後面跟着一個加法運算符,它會不會調用語法錯誤?

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

'i = + 1'與'i = 1'是一樣的東西。 '+'是這裏的一元運算符。 –

+0

請參閱[關於一元表達式的語言參考](https://docs.python.org/3/reference/expressions.html#grammar-token-u_expr) –

回答

14

i+=1i=i+1相同。 i=+1只是表示i=(+1)

+2

OP似乎明白這一點。問題是,爲什麼'+ 1'不是非法的語法。 –

2

i =+ 1相同i = +1,或i = 1

5

Tokenizers通常不需要空格,除非有必要消除歧義(例如,您需要空格或變量名和語言關鍵字之間的某種形式的標點符號,以便可以識別關鍵字)。

因此,x=+yx =+ yx = +y都是等價的,在調用上y一元+操作者和分配給x所有的情況下。一元加運算符不常用,但僅僅因爲它不常見並不意味着它不被識別和接受。

作爲比較,C/C++等中的-->「運算符」是another example where humans looking for spaces and tokenizers ignoring them causes confusion

+2

'! - '也是[javascript]中一些混淆的源頭(http:// stackoverflow。com/q/34323527/1547004) –

0

沒有語法錯誤,因爲表達式i =+ 1i = (+1)相同,而+1是完全合法的。它是一個一元運算符,不是加法運算符。 x=(+1)
x+=1被視爲:x=x+1

有其自己的左操作數handside和它們的右手側的操作數(例如*乘法)操作的二進制運算符

1

x=+1作爲被處理。
還有一些一元運算符只需要右手邊操作數(例如〜/!否定)。有一些運算符可以是一元和二元的。

python中的加號也可以用作右邊的運算符,就像減號一樣。

Python的文檔:

的一元 - (負)運算符產生其數字 參數的否定。

一元+(加號)運算符使其數值參數保持不變。