5.2 整型
Python有几种整型类型。布尔类型是只有两个值的整型。常规整型是绝大多数现代系统都能识别的整型。Python也有长整型类型。然而,它表示的数值大小远超过C语言的长整型。下面我们先来了解一下这些类型,然后再来研究那些用于Python整型类型的操作符和内建函数。
5.2.1 布尔型
Python从版本2.3开始支持布尔类型。该类型的取值范围只有两个值,也就是布尔值True和布尔值False。我们会在本章的末尾一节5.7.1详细讲解布尔对象。
5.2.2 标准整型
Python的标准整型类型是最通用的数字类型。在大多数32位机器上,标准整型类型的取值范围是-231到231-1,也就是-2 147 483 648〜2 147 483 647。如果在64位机器上使用64位编译器编译Python,那么在这个系统上的整型将是64位。下面是一些Python标准整型类型对象的例子。
Python标准整型类型等价于C的(有符号)长整型。整型一般以十进制表示,但是Python也支持八进制或十六进制来表示整型。如果八进制整型以数字“0”开始,十六进制整型则以“0x”或“0X”幵始。
5.2.3 长整型
关于Python长整型类型我们必须要提的是,请不要将它和C或其他编译型语言的长整型类型混淆。那些语言的长整型典型的取值范围是32位或64位。Python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python能轻松表达很大的整型。
长整型类型是标准整型类型的超集,当你的程序需要使用比标准整型类型更大的整型时,长整型类型就有用武之地了。在一个整型值后面加个L (大写或小写都可以),表示这个整型是长整型。这个整型可以是十进制、八进制、或十六进制。下面是一些长整型的例子。
核心风格:用大写字母“L“表示长整型
尽管Python也支持用小写字母L标记的长整形,但是我们郑重推荐您仅使用大写的“L”,这样能有效避免数字1和小写L的混淆。Python在显示长整型类型数值的时候总是用大写“L”,目前整型和长整型正在逐渐缓慢的统一,您只有在对长整型调用repr()函数时才有机会看到“L”,如果对长整型对象调用str()函数就看不到L。举例如下。
5.2.4 整型和长整型的统一
这两种整型类型正在逐渐统一为一种。在Python 2.2以前,标准整型类型对象超出取值范围会溢出 (比如上面提到的大于2**32的数),但是从Pythcm2.2以后就再也没有这样的错误了。
Python 2.1
Python 2.2
移除这个错误是第一步。下一步修改位移位,左移位导致出界(导致0值)在过去是经常可能发生的事。
在Python2.3中,这个操作产生一个警告,不过在2.4版里移除了这个Warning,并且这步操作生成了一个真正的长整型。
Python 2.3
Python 2.4
不远的将来,至少普通用户会几乎感觉不到长整型的存在。必要时整型会悄悄自动转换为长整型。当然,那些要调用C的人仍然可以继续使用这两种整型类型,因为C代码必须区分不同的整型类型。如果你想详细了解标准整型与长整型整合的信息,请阅读PEP237。