比较真的允许返回数字而不是布尔值吗?为什么?

问题描述 投票:0回答:1

我在Python文档的真值测试下发现了一个令人惊讶的句子:

除非另有说明,具有布尔结果的运算和内置函数始终返回 0 或 False(表示 false)和 1 或 True(表示 true)。

关系运算符似乎没有例外语句,因此 IIUC 它们可以在某些内置类型(例如

0
)的值上返回
1
False
,而不是
True
7 < 3
,甚至是不确定的。

因此,为了满足我的代码生成

bool
类型值的规范要求或用于防御性编程(无论何时很重要),我是否应该将逻辑表达式包装在对
bool
的调用中?

补充问题:为什么会有这个纬度?它是否使 CPython 或其他实现变得更容易?

python types type-conversion boolean truthiness
1个回答
0
投票

因此,了解

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'

© www.soinside.com 2019 - 2024. All rights reserved.