5.7 其他数字类型

5.7.1 布尔“数“

从Python2.3开始,布尔类型添加到了Python中来。尽管布尔值看上去是“True”和“False”,但是事实上是整型的子类,对应与整型的1和0。下面是有关布尔类型的主要概念。

  • 有两个永不改变的值True或False。

  • 布尔型是整型的子类,但是不能再被继承而生成它的子类。

  • 没有nonzero方法的对象的默认值是True。

  • 对于值为零的任何数字或空集(空列表、空元组和空字典等)在Python中的布尔值都是False。

  • 在数学运算中,Boolean值的True和False分别对应于1和0。

  • 以前返回整型的大部分标准库函数和内建布尔型函数现在返回布尔型。

  • True和False现在都不是关键字,但是在Python将来的版本中会是。

所有Python对象都有一个内建的True或False值,对内建类型来说,这个值究竟是True还是False请参阅章节4.3.2中的核心备注。下面是使用内建类型布尔值的一些例子。

5.7 其他数字类型 - 图1

5.7 其他数字类型 - 图2

你可以在Python文档和PEP 285看到有关布尔类型的知识。

5.7.2 十进制浮点型

从Python2.4起(参阅PEP327)十进制浮点制成为一个Python特性。这主要是因为下面的语句经常会让一些编写科学计算或金融应用程序的程序员发狂。

5.7 其他数字类型 - 图3

为什么会这样?这是因为语言绝大多数C语言的双精度实现都遵守IEEE 754规范,其中52位用于底。因此浮点值只能有52位精度,类似这样的值的二进制表示只能象上面那样被截断。0.1的二进制表示是0.11001100110011…2*-3,因为它最接近的二进制进似值是0.0001100110011…,或1/16 + 1/32+1/256+…

你可以看到,这些片段不停的重复直到舍入出错。如果我们使用十进制来做同样的事情,感觉就会好很多,看上去会有任意的精度。注意下面,你不能混用十进制浮点型和普通的浮点型。你可以通过字符串或其他十进制数创建十进制数浮点型。必须导入decimal模块以便使用Decimal类。

5.7 其他数字类型 - 图4

你可以从Python文档中读取相关的PEP以了解十进制数。值得庆幸的是,十进制数和其他数值类型一样,可以使用同样的算术操作符。由于十进制数本质上是一种用于数值计算的特殊类,我们在本章的剩余部分将不再专门讲解十进制数。