Python semi noob,有人能解释为什么这种音素出现在';列表';

Python semi noob,有人能解释为什么这种音素出现在';列表';,python,Python,我正在开发一个小应用程序,它从存储在列表中的列表中提取数据,通过类init传递数据,然后显示/允许用户工作。一切都很顺利,直到我尝试在空闲状态下格式化原始的“列表”,以便(对我来说)更容易阅读。所以我把9号改成09号,8号改成08号。等等,这是一个简单的格式化/间距更改,它打破了整个该死的程序,引用“无效令牌”。这就是WTF,我想。于是,我打开了解释器,开始输入: >x = [5,5] #Control >x [5, 5] >>> y=[05,05]

我正在开发一个小应用程序,它从存储在列表中的列表中提取数据,通过类init传递数据,然后显示/允许用户工作。一切都很顺利,直到我尝试在空闲状态下格式化原始的“列表”,以便(对我来说)更容易阅读。所以我把9号改成09号,8号改成08号。等等,这是一个简单的格式化/间距更改,它打破了整个该死的程序,引用“无效令牌”。这就是WTF,我想。于是,我打开了解释器,开始输入:

>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