2016-06-17 138 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问题。)

相关问题