其他的数字类型——布尔型
一些人可能会争论到:Python的布尔类型,bool本质上是数字,因为它的两个值 True和False,只是整数1和0的以不同方式打印出的自定义版本。虽然这是大多数程序员需要知道的全部,但让我们更详细的探索一下这个类型。
更规范的说,今天的Python有明确的名为bool的布尔数据类型,有可用的值True和False作为预先赋值的内置名称。在内部,名称True和False是bool的实例,它们反过来只是内置整数类型int的一个子类(从面向对象的角度)。 True和False表现得和整数1和0完全相似,除了它们有自定义的打印逻辑——它们将自己打印为单词True和False,而非数字1和0。bool通过为它的两个对象重新定义str和repr字符串格式来达到这个目的。
因为这个自定义,在交互式提示符键入的布尔表达式输出打印为单词True和False而非更老和更不明显的1和0。另外,布尔型让真值在代码中更明确。比如,无限循环现在可以编码为while True:,而不是更不直观的 while 1:。类似地,标记能更清楚以flag = False初始化。将在第三部分进一步讨论这些语句。
然而,再说一次,对大多数实际用途来说,可以将True和False当做被设置为整数1和0的预定义变量。不管怎样,大多数程序员一直都是将True和False预先赋值为1和0的;bool类型只是让其成为标准。然而,它的实现会导致奇怪的结果。因为True仅仅是带有自定义显示格式的整数1,True+4在Python中得到整数5!
>>> type(True)
<class 'bool'>
>>> isinstance(True, int)
True
>>> True == 1 # 值相同
True
>>> True is 1 # 但是一个不同的对象:见下一章
False
>>> True or False # 和: 1 or 0 一样
True
>>> True + 4 # (嗯。。。)
5
因为在真实Python代码中可能不会碰到像上面最后一个表达式,所以可以放心地忽略掉它的任何更深奥的玄学内涵。
在第9章将复习布尔型来定义Python的真值的概念,然后在第12章再次复习来看布尔操作符如and和or如何工作。
学习 Python:强大的面向对象编程(第 5 版)
关于 LearnKu
推荐文章: