Byt*_*ter 3 python types boolean type-conversion truthiness
我在 Python 文档的真值测试下发现了一个令人惊讶的句子:
\n\n\n除非另有说明,具有布尔结果的运算和内置函数始终返回 0 或 False(表示 false)和 1 或 True(表示 true)。
\n
关系运算符似乎没有例外语句,因此 IIUC 它们可以返回0and1而不是某些内置类型(例如 )的值上的Falseand ,甚至是不确定的。True7 < 3
因此,为了满足我的代码生成类型值bool或防御性编程(只要这很重要)的规范要求,我应该将逻辑表达式包装在对 的调用中吗bool?
附加问题:为什么会有这个纬度?它是否使 CPython 或其他实现变得更容易?
\n编辑\n问题已得到解答并且我已接受,但我想在PEP 285 \xe2\x80\x93 添加布尔类型中添加它,我发现了以下语句:
\n然而,PEP 似乎不如文档(其中语言和库参考是主要部分)权威,并且与 PEP 存在许多偏差(其中许多都明确提到)。因此,我认为,在团队更新之前,PEP 的更强有力的保证是不可信的。
\n编辑\n我已在 GH 上将其报告为 Python 问题
\n因此,理解bool对象就是 int对象可能很重要,因为issubclass(bool, int)这是事实。
事实也是如此isinstance(True, int) and isinstance(False, int)。
在 2002 年发布的 2.3 版本之前,Python 缺乏类型bool。PEP 285是已接受的提案。在此之前,这些操作将返回0或1。您可以阅读2.3 的“WhatsNew”:
\n\n大多数标准库模块和内置函数已\n更改为返回布尔值。
\n
因此,我只能推测该语言被保留下来0,1而标准库等赶上了这一变化。bool但到目前为止,我认为当返回值是布尔值时,内置函数中的所有内容以及我使用过的标准库的每个部分都会返回。
但请记住,从发行说明来看:
\n\n\n\n
True总而言之,用一句话来说False:它们\xe2\x80\x99是拼写整数值1和的替代方法0,唯一的区别是\nstr()和repr()返回字符串\'True\'and\'False\'而不是\'1\'\nand\'0\'。