当通过python-memcached在memcached中存储bool时,我注意到它以整数形式返回。检查库的代码向我显示,有一个地方检查isinstance(val, int)
以将值标记为整数。
所以我在python shell中测试了它并发现了以下内容:
>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True
但为什么bool
确实是int
的子类?
这有点意义,因为布尔值基本上是一个int,它只能取两个值,但它需要比实际整数少得多的操作/空间(没有算术,只有一点存储空间).... / p>
答案 0 :(得分:90)
来自对http://www.peterbe.com/plog/bool-is-int的评论
如果你在bool类型的时候出现,这是完全合乎逻辑的 添加到python(大约2.2或2.3)。
在引入实际bool类型之前,0和1是 官方代表真值,类似于C89。避免 不必要的打破非理想但工作的代码,新的bool类型 需要像0和1一样工作。这不仅仅是真值, 但所有积分操作。没有人会建议使用布尔值 导致数字上下文,大多数人也不建议测试 平等确定真值,没有人想找出困难 这种方式现有的代码是多少。因此做出决定 真假伪装分别为1和0。这仅仅是一个 语言演变的历史人物。
这个很好的解释可以归功于dman13。
答案 1 :(得分:25)
见PEP 285 -- Adding a bool type。相关段落:
6)bool应该从int继承吗?
=>是。
在一个理想的世界中,bool可能会更好地实现为 单独的整数类型,知道如何执行混合模式 算术。但是,从int继承bool可以简化 实现极大(部分原因是所有调用的C代码) PyInt_Check()将继续工作 - 这将返回true int的子类。
答案 2 :(得分:0)
还可以使用help
检查控制台中的Bool
值:
帮助(真)强>
help(True)
Help on bool object:
class bool(int)
| bool(x) -> bool
|
| Returns True when the argument x is true, False otherwise.
| The builtins True and False are the only two instances of the class bool.
| The class bool is a subclass of the class int, and cannot be subclassed.
|
| Method resolution order:
| bool
| int
| object
|
帮助(假)强>
help(False)
Help on bool object:
class bool(int)
| bool(x) -> bool
|
| Returns True when the argument x is true, False otherwise.
| The builtins True and False are the only two instances of the class bool.
| The class bool is a subclass of the class int, and cannot be subclassed.
|
| Method resolution order:
| bool
| int
| object