当前位置:  开发笔记 > 编程语言 > 正文

为什么bool是int的子类?

如何解决《为什么bool是int的子类?》经验,为你挑选了2个好方法。

当通过python-memcached在memcached中存储bool时,我注意到它以整数形式返回.检查库的代码向我显示有一个地方isinstance(val, int)被检查以将值标记为整数.

所以我在python shell中测试了它并注意到以下内容:

>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True

但为什么究竟是bool一个子类int呢?

它有点意义,因为布尔值基本上是一个int,它可以只取两个值,但它需要比实际整数少得多的操作/空间(没有算术,只有一点存储空间)....



1> Polynomial..:

来自http://www.peterbe.com/plog/bool-is-int的评论

这是完全合乎逻辑的,如果你在bothon类型被添加到python时(大概2.2或2.3左右).

在引入实际bool类型之前,0和1是真值的官方表示,类似于C89.为了避免不必要地破坏非理想但工作的代码,新的bool类型需要像0和1一样工作.这不仅仅是真值,而是所有积分运算.没有人会建议在数值上下文中使用布尔结果,大多数人也不建议测试相等性来确定真值,没有人想要找出现有代码的硬道路.因此,将True和False伪装成1和0的决定.这仅仅是语言演变的历史人工制品.

对于这个很好的解释,可以归功于dman13.


有趣的是,这是我在StackExchange上最高的投票答案,尽管我一生都没有写过一行Python!
(不再是真的 - Python很有趣!)
请注意,这可能在历史上是正确的,但在惯用的情况下,您会看到很多`sum(值的值为[f(值)])```f(x)`是某种过滤函数,你需要看多少值通过过滤器.
就我个人而言,我宁愿写出“ sum(1,如果f(value)表示值的值)”,但实际上我已经看到受人尊敬的人主张对布尔值进行数值运算。

2> Steven Rumba..:

参见PEP 285 - 添加bool类型.相关段落:

6)bool应该继承自int吗?

=>是的.

在理想的世界中,bool可能更好地实现为一个知道如何执行混合模式算术的单独整数类型.但是,从int继承bool可以极大地简化实现(部分原因是所有调用PyInt_Check()的C代码都将继续工作 - 这对于int的子类返回true.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有