在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,所以9
和011
都被内部转换为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)。
它们显然是八进制(基数为8)的数字,而0只是Python 2曾经使用过时的前缀。
在Python 3中,您必须编写: 0o11
。
他们仍然是整数,但是与他们的合作将会以普通的10位的形式出现。
Python版本2和3都理解用'0o'和'0O'(大写字母o)编写的八进制数,所以如果使用Python 2.x也习惯使用它。
只能在字符串中使用数字中的前导零。
您可以使用int()将来自任何其他基本系统的整数转换。
>>> int(0o20)
16
如果您希望您的输出以前导零显示,请根据此答案进行定义:以前导零显示数字
如果您打算使用邮政编码,最好将它们作为字符串以各种方式处理。