You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python比较操作是否可返回数字而非布尔值?规范与实现疑问

Python真值测试文档表述引发的疑问

我在Python文档的《真值测试》中发现了一句令人惊讶的表述:

所有返回布尔结果的操作和内置函数,除非另有说明,否则为假时返回0或False,为真时返回1或True。

关系运算符似乎没有例外说明,因此我理解(IIUC),对于某些内置类型的值(例如7 < 3),它们可能返回0和1而非False和True,甚至可能是非确定性的。

因此,为了满足代码需生成bool类型值的规范要求,或是出于防御性编程的目的(在重要场景下),我是否应该用bool()调用包裹逻辑表达式?

附加问题

为何会存在这种灵活性?这是否会给CPython或其他实现带来某种便利?


补充说明(PEP 285相关)

问题已得到解答并被我采纳,但我想补充说明,在《PEP 285 – 添加bool类型》中我发现了以下表述:

  1. 所有概念上返回布尔结果的内置操作都将改为返回False或True而非0或1;例如比较操作、“not”运算符以及isinstance()这类断言函数。
  2. 所有定义为返回布尔结果的内置操作都将改为返回False或True而非0或1。具体包括比较操作(<、<=、==、!=、>、>=、is、is not、in、not in)、一元运算符‘not’、内置函数callable()、hasattr()、isinstance()和issubclass()、字典方法has_key()、字符串和unicode方法endswith()、isalnum()、isalpha()、isdigit()、islower()、isspace()、istitle()、isupper()和startswith()、unicode方法isdecimal()和isnumeric(),以及文件对象的‘closed’属性。operator模块中的断言函数也改为返回bool,包括operator.truth()。
  3. 唯一的变化是显式返回或赋值时表示真值的首选值。此前这些首选真值是0和1;本PEP将其改为False和True,并修改内置操作以返回这些首选值。

不过,PEP的权威性似乎低于文档(其中语言和库参考是核心部分),且存在大量与PEP不符的情况(其中许多已被明确提及)。因此我认为,在团队更新文档之前,PEP的更强保证不可轻信。


后续行动

我已在GitHub上提交了该Python问题。


内容的提问来源于stack exchange,提问作者ByteEater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:17:42