python 中以 0 开头的数字代表什么意思?

2024-12-20 08:37:00
admin
原创
71
摘要:问题描述:当我在 Python 中输入前面带有 0 的小整数时,它们会给出奇怪的结果。这是为什么?>>> 011 9 >>> 0100 64 >>> 027 23 我使用的是 Python 2.7.3。我在 Python 3.0 中测试过,显然现在这是一个...

问题描述:

当我在 Python 中输入前面带有 0 的小整数时,它们会给出奇怪的结果。这是为什么?

>>> 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来表示八进制常数,例如0o110o27等。Python 2.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.6+ 和 Python 3 都理解以“0o”和“0O”(大写 o)开头的八进制,因此在使用 Python 2.x 时也要养成使用 if 的习惯。

字符串中的数字仅使用前导零。

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

>>> int(0o20)

16

如果您希望输出以前导零显示,请按照以下答案进行定义:
显示带有前导零的数字

如果您打算使用邮政编码,最好在所有方面都将其视为字符串。

解决方案 4:

八进制数字。其他前缀0x用于十六进制和0b二进制。

解决方案 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

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

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

它们仍然是整数,但对它们进行运算将给出常规十进制形式的结果。

解决方案 8:

我已经尝试过了。我学到了一点。从 Java 中我知道这是一个陷阱:前导零会引入八进制数。我的同事们没有意识到这一点。在 Java 中工作多年后,他们仍然不知道这一点。

现在我对 Python 中的行为很感兴趣。我很欣赏从 Python 2 到 Python 3 的这种变化。这是一个陷阱,我从来没有理解为什么 Java(一种专注于“简单”的年轻语言)可以从 C 中接管这个愚蠢的解决方案。

以零开头的前缀可能会被意外输入(糟糕的解决方案)。十六进制数的 0x 永远不会被意外输入(好的解决方案)。但是 0 和 o 太相似了,因此我认为 Python 中的 0o23 不是一个完美的解决方案。我认为 0c23(o c tal)会是一个更好的解决方案。

解决方案 9:

数字文字的最新 Python 规范位于PEP-3127“整数文字支持和语法”中

Python 3.0 中已删除 011 的语法。Python 2.6 中添加了 0o11 的语法,它是 Python 3.0 之后唯一支持的语法。Python __future__2 中没有导入可以禁止或至少警告带有前导零的数字文字,因此开发人员必须知道 011 的含义以及应该避免使用它(并且实际上可以避免使用它)。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1008  
  在项目管理中,变更是一个不可避免的现象。无论是客户需求的调整、市场环境的变化,还是技术方案的更新,都可能引发项目的变更。如果处理不当,这些变更可能会导致项目延期、成本超支,甚至项目失败。因此,如何有效地应对项目变更,成为项目管理中的核心挑战之一。IPD(集成产品开发)作为一种高效的项目管理方法,其流程图不仅能够帮助团队...
IPD流程中的charter   0  
  IPD(Integrated Product Development,集成产品开发)是华为在长期实践中总结出的一套高效产品开发管理体系。它不仅帮助华为在全球市场中脱颖而出,也成为许多企业提升产品开发效率的参考标杆。IPD的核心在于通过跨部门协作、流程优化和资源整合,实现从需求分析到产品交付的全生命周期管理。通过实施IP...
IPD开发流程管理   0  
  华为IPD(集成产品开发)流程是一种以客户需求为导向、跨部门协同的高效项目管理方法。它通过系统化的流程设计和严格的阶段控制,确保项目从概念到交付的每个环节都能高效运作。IPD流程的核心在于打破传统职能部门的壁垒,将产品开发、市场、销售、供应链等关键环节整合到一个统一的框架中,从而实现资源的优化配置和信息的无缝流动。这种...
IPD流程中TR   0  
  在项目管理的实践中,CDCP(Certified Data Center Professional)认证评审是一个至关重要的环节。通过这一评审,项目团队不仅能够验证其数据中心设计和运营的合规性,还能提升整体管理水平。为了确保评审的顺利进行,准备一系列关键文档是必不可少的。这些文档不仅是评审的依据,也是项目团队与评审专家...
华为IPD是什么   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用