我在Python文档的真值测试下发现了一个令人惊讶的句子:
除非另有说明,具有布尔结果的运算和内置函数始终返回 0 或 False(表示 false)和 1 或 True(表示 true)。
关系运算符似乎没有例外语句,因此 IIUC 它们可以在某些内置类型(例如
0
)的值上返回 1
和 False
,而不是 True
和 7 < 3
,甚至是不确定的。
因此,为了满足我的代码生成
bool
类型值的规范要求或用于防御性编程(无论何时很重要),我是否应该将逻辑表达式包装在对 bool
的调用中?
补充问题:为什么会有这个纬度?它是否使 CPython 或其他实现变得更容易?
因此,了解
bool
对象 是 int
对象*可能很重要,因为 issubclass(bool, int)
是正确的。
所以
isinstance(True, int) and isinstance(False, int)
是真的。
在 2002 年发布的 2.3 版本之前,Python 缺少
bool
类型。 PEP 285 是已接受的提案。在此之前,这些操作将返回 0
或 1
。您可以在“WhatsNew”中阅读2.3:
大部分标准库模块和内置函数已被 更改为返回布尔值。
因此,我只能猜测该语言保留了
0
和 1
,而标准库等赶上了这一变化。但到目前为止,我认为当返回值是布尔值时,内置函数中的所有内容以及我使用过的标准库的每个部分都会返回bool
。
但请记住,从发行说明来看:
用一句话总结
和True
:它们是替代方法 拼写整数值False
和1
,唯一的区别是0
和str()
返回字符串repr()
和'True'
而不是'False'
和'1'
。'0'