Python semi noob,有人能解释为什么这种音素出现在';列表';
我正在开发一个小应用程序,它从存储在列表中的列表中提取数据,通过类init传递数据,然后显示/允许用户工作。一切都很顺利,直到我尝试在空闲状态下格式化原始的“列表”,以便(对我来说)更容易阅读。所以我把9号改成09号,8号改成08号。等等,这是一个简单的格式化/间距更改,它打破了整个该死的程序,引用“无效令牌”。这就是WTF,我想。于是,我打开了解释器,开始输入:Python semi noob,有人能解释为什么这种音素出现在';列表';,python,Python,我正在开发一个小应用程序,它从存储在列表中的列表中提取数据,通过类init传递数据,然后显示/允许用户工作。一切都很顺利,直到我尝试在空闲状态下格式化原始的“列表”,以便(对我来说)更容易阅读。所以我把9号改成09号,8号改成08号。等等,这是一个简单的格式化/间距更改,它打破了整个该死的程序,引用“无效令牌”。这就是WTF,我想。于是,我打开了解释器,开始输入: >x = [5,5] #Control >x [5, 5] >>> y=[05,05]
>x = [5,5] #Control
>x
[5, 5]
>>> y=[05,05] #control2
>>> y
[5, 5]
>>> z = [05, "ge"] #test. 'Integer', before string, apparantly works.
>>> z
[5, 'ge']
> a = ["ge", 09] #test2. String, before 'integer', cocks things up.
SyntaxError: invalid token
>>> b= ["ge", 9] #test3, this works fine.
>>> b
['ge', 9]
我想我的问题是。。。为什么会发生这种情况?为什么python在这些整数跟在字符串后面时将其解释为“标记”,而在它们跟在整数后面时将其解释为整数?这与列表或字符串无关。当您在数字前面加上
0
前缀时,它被解释为。9不是有效的八进制数字
Python 2.7.6
Type "help", "copyright", "credits" or "license" for more information.
>>> 09
File "<stdin>", line 1
09
^
SyntaxError: invalid token
>>> 011
9
不仅仅是Python,它是大多数编程语言。以零开头的数字表示数字是八进制的,这意味着只有数字
0-7
有效。因此,
5 == 05
6 == 06
7 == 07
8 == 010
9 == 011
...
15 == 017
16 == 020
...
255 == 0377
类似地,前缀
0x
表示数字是十六进制的(因此,有效数字是0-9
和a-f
:255==0xff
)这是因为python将前面有0
的数字解释为八进制,所以说09
没有多大意义
例如,如果您将其更改为以下内容:
a = ["ge", 07]
一切正常。这是因为如果数字以
0开始,则视为八进制数字,而八进制数字仅从0-7开始
例子
非常感谢所有回答的人。全体投票!事实上,我注意到一些0+数字似乎有效,但不确定为什么。再次感谢!
a = ["ge", 07]
>>> 015 - 02 #which is obviously not what you'd expect for base10 integers
11