>>> 011
9
>>> 0100
64
>>> 027
23
我正在使用Python 2.7.3。我已经在Python 3.0中进行了测试,显然现在这是一个错误。因此,这是特定于版本的。
它们显然仍然是整数:
>>> type(027)
<type 'int'>
#1 楼
这些是以8为底的数字(八进制数字)。一些示例:
Python 2(旧格式)
注意:这些形式仅适用于Python 2 .x。
011
等于1⋅8¹+1⋅8⁰= 9,0100
等于1⋅8²+0⋅8¹+0⋅8⁰= 64 ,027
等于2⋅8¹+7⋅8⁰= 16 + 7 =23。Python 3(新格式)
在Python 3,必须使用
0o
而不是0
来表示一个八进制常量,例如0o11
或0o27
等。Python2.x版本> = 2.6支持新格式和旧格式。0o11
等于1⋅8¹+1⋅8⁰= 9,0o100
等于1⋅8²+0⋅8¹+0⋅8⁰= 64,0o27
等于2⋅8¹+7⋅8⁰= 16 + 7 =23。#2 楼
在Python 2(和其他几种编程语言)中,它们表示八进制数。在Python 3中,
011
不再起作用,而应使用0o11
。编辑:它们是正整数。它们只是以不同的方式指定;并通过Python自动将它们转换为内部整数表示形式(实际上是基数2,因此
9
和011
都在内部转换为0b1001
)。#3 楼
Python第2版和第3版都理解八进制以'0o'和'0O'开头(大写o),因此在使用Python 2.x时也应养成使用if的习惯。只能在字符串中使用数字中的前导零。
您可以使用int()转换任何其他基本系统中的整数。
>>> int(0o20)
16
如果您希望输出以前导零显示,请按照以下答案进行定义:
以前导零显示数字
如果您打算使用邮政编码,则最好以各种方式将它们视为字符串。
#4 楼
八进制数字系统中的数字。其他前缀是0x
(十六进制)和0b
(二进制)。评论
请注意,在Python 3中,不允许前导零,并且八进制必须使用0o。
– Mark Ransom
2012年7月23日在20:42
#5 楼
这些是八进制数字(以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为底)。
#6 楼
那很容易。它们是八进制数字。http://en.wikipedia.org/wiki/Octal
还有一些以
0x
开头的数字。它们是十六进制数字:>>> 0x51
81
#7 楼
它们显然是八进制(以8为底)的数字,而0只是Python 2过去使用的过时前缀。在Python 3中,您必须编写:
0o11
。它们仍然是整数,但是使用它们进行运算将得到常规的以10为底的形式。
#8 楼
我已经尝试过了。我学到了一点。从Java我知道这是一个陷阱:前导零会引入一个八进制数。我有些同事没有回应。不知道在使用Java已有多年的经验。现在,我对Python的行为很感兴趣。我赞赏从Python 2到Python 3的转变。这是一个陷阱,我从未理解过为什么Java(专注于“轻松编程”的年轻语言)可以接管C的愚蠢解决方案。
A前导零作为前缀可能会被意外键入(错误的解决方案)。永远不会意外键入十六进制数字的0x(好的解决方案)。但是0和o相似,因此我认为Python中的0o23不是一个完美的解决方案。我认为0c23(八进制)将是更好的解决方案。
#9 楼
PEP-3127“整数文字支持和语法”中提供了最新的数字文字Python规范。011的语法已在Python 3.0中删除。 0o11的语法已在Python 2.6中添加,并且是Python 3.0之后唯一受支持的语法。在Python 2中没有
__future__
导入会禁止或至少警告带有前导零的数字文字,因此开发人员必须知道011的含义,应避免使用011(并且实际上可以避免)。
评论
也许双星号不是陈述指数的最清晰方法。如果它是Stackoverflow标准,或其他地方的标准,则必须进行更改。
– David L
2015年1月6日下午13:47
@DavidL:在Python中,**是指数运算符,^是按位XOR。
–unutbu
2015年1月6日14:05
请注意,在Python 3中,输入011将导致SyntaxError:无效令牌。请改用0o11。
– p3nchan
18-2-24在11:45
@Okmarq您对指数运算符的更改使该代码在Python中不再有效。 **是指数,^是按位XOR。
– Endolith
4月14日15:51