What do numbers starting with 0 mean in python?
当我在python中输入前面有0的小整数时,它们会产生奇怪的结果。为什么会这样?
1 2 3 4 5 6 | >>> 011 9 >>> 0100 64 >>> 027 23 |
注:python版本2.7.3我在python 3.0中测试过这个,显然这是一个错误。所以它是特定于版本的。
编辑:它们显然还是整数:
1 2 | >>> type(027) `<type 'int'>` |
这些数字以8为基数(八进制数字)表示。例如,
在python 2(以及其他一些编程语言)中,它们表示八进制数。
在python 3中,
作为对编辑的响应:它们是规则整数。它们只是以不同的方式指定的;它们由python自动转换为内部整数表示(实际上是基2,因此
八进制数字系统中的数字。其他前缀是十六进制的
两个python版本2&3都理解以"0o"和"0o"(大写O)开头的八进制,因此在使用python 2.x时也要习惯使用if。
字符串中的数字只能使用前导零。
您可以使用int()从任何其他基本系统转换整数。
1 | 16 |
如果希望输出以前导零显示,则根据此答案定义它:带前导零的显示数字
如果您曾经计划使用邮政编码,那么最好在所有方面将其视为字符串。
这些是八进制数(以8为基数,值为0-7)
您可以使用oct()函数将十进制数转换为八进制数。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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):
1 2 | int(str(17), 8) Out[129]: 15 |
类似的规则/函数集也适用于使用hex()函数的十六进制数(以16为基数)。
这很容易。它们是八进制数。
网址:http://en.wikipedia.org/wiki/octal
还有一些数字是以
1 2 | >>> 0x51 81 |
它们显然是八进制(以8为基数)数字,而0只是python 2使用的一个过时的前缀。
在python 3中,您必须编写:
它们仍然是整数,但是用它们进行运算会得到正规的基10形式的结果。
最新的数字文本python规范在PEP-3127"整数文本支持和语法"中。
在python 3.0中删除了011的语法。在python 2.6中添加了0o11的语法,它是python 3.0之后唯一支持的语法。在python 2中没有
我试过了。我学了一点。从Java我知道这是一个陷阱:超前零引入八进制数。我有同事,他们没有回应。不知道经过几年的Java经验。
现在我很感兴趣的是Python的行为是什么。我很欣赏从python 2到python 3的变化。这是陷阱,我从来没有理解为什么Java(一个年轻的语言,专注于"轻松")可以接管从C的愚蠢的解决方案。
前导零作为前缀可能被意外键入(错误的解决方案)。十六进制数的0x永远不会意外键入(好的解决方案)。但是0和O是相似的,所以我认为在python中0o23不是一个完美的解决方案。在我看来,0c23(八进制)是更好的解决方案。