为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕沐林林 2023-06-13 15:00:00
直到 Python 3.5,文档仍然说(强调我的):4.1. 真值检验可以测试任何对象的真值,用于 if 或 while 条件或作为下面布尔运算的操作数。以下值被认为是错误的:NoneFalse任何数字类型的零,例如0, 0.0, 0j。任何空序列,例如'', (), []。任何空映射,例如{}.用户定义类的实例,如果该类定义了一个__bool__()或__len__()方法,当该方法返回整数零或bool 值时False。[1]所有其他值都被认为是真实的——所以许多类型的对象总是真实的。除非另有说明,否则具有布尔结果的操作和内置函数始终返回0or Falsefor false 和1or Truefor true。(重要的例外:布尔运算or总是and返回它们的操作数之一。)一个非空列表 like[5]不属于上面列表中的任何内容,因此“所有其他”指定它是真的。但从 Python 3.6 开始,它就消失了。该部分现在说:真值检验可以测试任何对象的真值,用于iforwhile 条件或作为下面布尔运算的操作数。默认情况下,一个对象被认为是真实的,除非它的类定义了一个返回零的__bool__()方法,当用该对象调用时。[1] 以下是大多数被认为是 false 的内置对象:False__len__()常量定义为假:None和False。任何数字类型的零:0, 0.0, 0j, Decimal(0),Fraction(0, 1)空序列和集合:'', (), [], {}, set(),range(0)除非另有说明,否则具有布尔结果的操作和内置函数始终返回0or Falsefor false 和1or Truefor true。(重要的例外:布尔运算or总是and返回它们的操作数之一。)Now[5]可能有一个__bool__()返回 的方法False,因此它是错误的。当前文档中是否有新的地方以某种方式指定非空列表为真?
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

所有内置类的文档都列出了它们实现的所有特殊方法。如果未列出某个方法,则可以假定它未实现。

由于 的文档list没有说明重写该__bool__方法,因此它继承了默认行为。

查看完整回答
反对 回复 2023-06-13
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

刚刚在参考资料中找到了一个地方(强调我的):

6.11. 布尔运算

[...]

在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值被解释为假: , ,False所有None类型的数字零,以及空字符串和容器(包括字符串、元组、列表、字典、集合和冷冻套装)。所有其他值都被解释为 true。 用户定义的对象可以通过提供 __bool__()方法来自定义它们的真值。

令我有点困扰的是,这与下一句有关用户定义对象的内容立即矛盾,但我会接受。


查看完整回答
反对 回复 2023-06-13
?
暮色呼如

TA贡献1853条经验 获得超9个赞

[5]是一个list对象。除非您专门覆盖了内置__bool__方法,否则您将获得默认方法。正如文档已经暗示的那样,这是Truthy

更新并没有改变太多,只是扩大了解释以涵盖派生类型和内置类型的其他扩充。


查看完整回答
反对 回复 2023-06-13
  • 3 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信