在Python中,以0开头的数字是什么意思?

当我在前面输入一个0的小整数到python时,他们给出奇怪的结果。 为什么是这样?

>>> 011 9 >>> 0100 64 >>> 027 23 

注意:Python版本2.7.3我已经在Python 3.0中测试过了,显然这是一个错误。 所以它是特定于版本的。

编辑:他们显然仍然是整数:

 >>> type(027) `<type 'int'>` 

这些数字以8位数字(八进制数字)表示。 例如,

011等于1*(8**1) + 1*(8**0) = 9,

0100等于1*(8**2) + 0*(8**1) + 0*(8**0) = 64,

027等于2*(8**1) + 7*(8**0) = 16 + 7 = 23。

在Python 2(和其他几种编程语言)中,这些表示八进制数 。

在Python 3中, 011不再有效,您可以使用0o11

回应编辑 :他们是正规的整数。 他们只是指定不同的方式; 并且它们被Python自动转换为内部整数表示(实际上是基数2,所以9011都被内部转换为0b1001 )。

八进制数字中的数字。 其他前缀是十六进制的0x和二进制的0b

这些是八进制数(基数8,值0 – 7)

您可以使用oct()函数将十进制数转换为八进制数。

 In [125]: for i in range(10): .....: print '{:5} {:5}'.format(i, oct(i)) .....: 0 0 1 01 2 02 3 03 4 04 5 05 6 06 7 07 8 010 9 011 

并使用int()函数将八进制值转换为整数(在本例中为8):

 int(str(17), 8) Out[129]: 15 

使用hex()函数,类似的一组规则/函数适用于十六进制数字(基数16)。

这很容易。 他们是八进制数。

http://en.wikipedia.org/wiki/Octal

还有一些以0x数字。 他们是十六进制数字:

 >>> 0x51 81 

它们显然是八进制(基数为8)的数字,而0只是Python 2曾经使用过时的前缀。

在Python 3中,您必须编写: 0o11

他们仍然是整数,但是与他们的合作将会以普通的10位的形式出现。

Python版本2和3都理解用'0o'和'0O'(大写字母o)编写的八进制数,所以如果使用Python 2.x也习惯使用它。

只能在字符串中使用数字中的前导零。

您可以使用int()将来自任何其他基本系统的整数转换。

>>> int(0o20)

 16 

如果您希望您的输出以前导零显示,请根据此答案进行定义:以前导零显示数字

如果您打算使用邮政编码,最好将它们作为字符串以各种方式处理。