2016-06-17 137 views
1

我剛開始學習pyhton並同時用比較運營商合作,我當我執行與「==」操作符下面的代碼得到這個錯誤,的Python:語法錯誤:無效令牌

40 == 0040.0 

導致成真,從解釋器,並且還

40 == 40.0 

導致真

但是當我執行下面的代碼,

40 == 0040 

它扔一個錯誤,

File "stdin", line 1

40 == 0040

SyntaxError: invalid token

指向無效令牌尾隨零。

請幫我理解發生了什麼,感謝您的提前。

+0

0040 as 000040已經被視爲十六進制,如果你int(0040)或int(000040)你會得到32 – dmitryro

+0

@dmitryro你的意思是八進制嗎? – shaktimaan

+0

@dmitryro 0040是一個SyntaxError,不是十六進制或八進制數(後者應該有'0o'而不是'00'。找出差異。) – Evert

回答

0

Python 3不允許帶前導零的數字來防止與八進制值混淆。如果您必須具有前導零,請使用format()

它在Python 2中更清晰,其中40 == 0040的計算結果爲False

編輯:來自實例鏈接評論次數:

>>> "{0:0>3}".format(1) '001'

進一步解釋:

{0 : 0 > 3} │ │ │ │ │ │ │ └─ Width of 3 │ │ └─ Align Right │ └─ Fill with '0' └─ Element index

+0

嗨meatspace,你可以一次告訴我如何使用格式()? – Anil

+0

這可以簡潔地解釋它:http://stackoverflow.com/questions/17118071/python-add-leading-zeroes-using-str-format – meatspace

0

浮點數,前導零被接受,並簡單地忽略(因爲他們沒有貢獻任何東西,但可讀性)。 因此,0040.0是浮點數40.0

對於整數,在一個數開始時的零呈現出不同的含義:根據下一個字符,它表示數字的其餘部分應該被解釋爲八進制(oO),十六進制(xX)或二進制數(bB)。
如果另一個字符跟在第一個0之後,則它將是SyntaxError0040這是你所看到的:沒有提示它應該是一個浮點數(不是'e','d'或小數點'。'),也不是第二個零的前綴不同的整數基數。

浮點數和整數的確切定義在lexical analysis of the Python reference中給出。


你比較評估,以True的結果是不同的野獸,只是表示浮點40恰好是一個精確的表示,等於整數40.

(關於如何以及爲什麼對整數並漂浮,請參閱例如詢問the first integer that can't be represented by a float的SO問題。)

相關問題