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

Rob*_*man 57 python python-2.x

当我输入前面带有0的小整数到python时,它们会产生奇怪的结果.为什么是这样?

>>> 011
9
>>> 0100
64
>>> 027
23
Run Code Online (Sandbox Code Playgroud)

注意:Python版本2.7.3我在Python 3.0中对此进行了测试,显然现在这是一个错误.所以这是版本特定的.

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

>>> type(027)
`<type 'int'>`
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 61

这些是以基数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.

  • @DavidL:在Python中,[`**`是指数运算符](https://docs.python.org/2/tutorial/introduction.html#numbers),[`^`是按位异或](https: //wiki.python.org/moin/BitwiseOperators). (23认同)
  • 请注意,在Python 3中,输入`011`将导致`SyntaxError:invalid token`.请改用"0o11". (10认同)

Mic*_*rny 45

在Python 2(以及一些其他编程语言)中,这些代表八进制数.

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

响应编辑:它们是常规整数.它们只是以不同的方式指定; 和它们会自动被Python转换为内部整数表示(这是基2实际上,这样既9011内部转换为0b1001).


小智 10

Python版本2和3都理解使用前导'0o'和'0O'(大写o)编写的八进制文件,因此习惯使用if时也使用Python 2.x.

仅在字符串中使用数字前导零.

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

>>> int(0o20)

16
Run Code Online (Sandbox Code Playgroud)

如果希望输出显示前导零,则根据此答案定义输出: 显示前导零的数字

如果您计划使用邮政编码,最好将它们作为字符串处理.


Zau*_*bov 9

八进制数值系统中的数字.其他前缀0x用于十六进制和0b二进制.

  • 请注意,在Python 3中,不允许使用前导零,并且必须使用"0o"表示八进制. (5认同)

Lev*_*von 6

这些是八进制数字(基数为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
Run Code Online (Sandbox Code Playgroud)

并使用带有适当基数的int()函数将八进制值转换为整数(在本例中为8):

int(str(17), 8)
Out[129]: 15
Run Code Online (Sandbox Code Playgroud)

类似的规则/函数集使用hex()函数适用于十六进制数字(基数16).