当前文档在哪里指定 [5] 为真?

直到 Python 3.5,文档仍然说(强调我的):

4.1. 真值检验

可以测试任何对象的真值,用于 if 或 while 条件或作为下面布尔运算的操作数。以下值被认为是错误的:

  • None

  • False

  • 任何数字类型的零,例如00.00j

  • 任何空序列,例如''()[]

  • 任何空映射,例如{}.

  • 用户定义类的实例,如果该类定义了一个__bool__()__len__()方法,当该方法返回整数零或bool 值时False。[1]

所有其他值都被认为是真实的——所以许多类型的对象总是真实的。

除非另有说明,否则具有布尔结果的操作和内置函数始终返回0or Falsefor false 和1or Truefor true。(重要的例外:布尔运算or总是and返回它们的操作数之一。)

一个非空列表 like[5]不属于上面列表中的任何内容,因此“所有其他”指定它是真的。

但从 Python 3.6 开始,它就消失了。该部分现在说:

真值检验

可以测试任何对象的真值,用于iforwhile 条件或作为下面布尔运算的操作数。

默认情况下,一个对象被认为是真实的,除非它的类定义了一个返回零的__bool__()方法,当用该对象调用时。[1] 以下是大多数被认为是 false 的内置对象:False__len__()

  • 常量定义为假:NoneFalse

  • 任何数字类型的零:00.00jDecimal(0),Fraction(0, 1)

  • 空序列和集合:''()[]{}set(),range(0)

除非另有说明,否则具有布尔结果的操作和内置函数始终返回0or Falsefor false 和1or Truefor true。(重要的例外:布尔运算or总是and返回它们的操作数之一。)

Now[5]可能有一个__bool__()返回 的方法False,因此它是错误的。当前文档中是否有新的地方以某种方式指定非空列表为真?


慕沐林林
浏览 177回答 3
3回答

忽然笑

所有内置类的文档都列出了它们实现的所有特殊方法。如果未列出某个方法,则可以假定它未实现。由于 的文档list没有说明重写该__bool__方法,因此它继承了默认行为。

陪伴而非守候

刚刚在参考资料中找到了一个地方(强调我的):6.11. 布尔运算[...]在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值被解释为假: , ,False所有None类型的数字零,以及空字符串和容器(包括字符串、元组、列表、字典、集合和冷冻套装)。所有其他值都被解释为 true。 用户定义的对象可以通过提供 __bool__()方法来自定义它们的真值。令我有点困扰的是,这与下一句有关用户定义对象的内容立即矛盾,但我会接受。

暮色呼如

[5]是一个list对象。除非您专门覆盖了内置__bool__方法,否则您将获得默认方法。正如文档已经暗示的那样,这是Truthy。更新并没有改变太多,只是扩大了解释以涵盖派生类型和内置类型的其他扩充。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python