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

Python 当前文档在哪里规定[5]为真?,python,Python,Background:我打算回答,从“指定非空列表为true和[…]”开始。但后来我意识到它不再具体说明这一点了。至少不是很明显,过去是这样 直到Python 3.5,文档(重点): 4.1。真值检验 任何对象都可以测试真值,用于if或while 条件或作为下面布尔运算的操作数。以下 值被认为是错误的: None False 任何数字类型的零,例如,0,0.0,0j 任何空序列,例如,',(),[] 任何空映射,例如,{} 用户定义类的实例,如果该类定义了\uuubool\uool()或\ul

Background:我打算回答,从“指定非空列表为true和[…]”开始。但后来我意识到它不再具体说明这一点了。至少不是很明显,过去是这样

直到Python 3.5,文档(重点):

4.1。真值检验

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

  • None
  • False
  • 任何数字类型的零,例如,
    0
    0.0
    0j
  • 任何空序列,例如,
    '
    ()
    []
  • 任何空映射,例如,
    {}
  • 用户定义类的实例,如果该类定义了
    \uuubool\uool()
    \ulen\uool()
    方法,则该方法返回整数零或
    bool
    False
    。[1]
所有其他值都被认为是真的-因此许多类型的对象总是真的。

除非另有说明,否则具有布尔结果的操作和内置函数始终返回
0
False
表示False,返回
1
True
表示True。(重要例外:布尔运算
始终返回其操作数之一。)

[5]
这样的非空列表不属于上述列表中的任何内容,因此“所有其他”指定它为真

但自从Python3.6以来,这种情况就消失了。该节:

真值检验

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

默认情况下,除非对象的类定义了 返回
False
\uuuuuuu bool\uuuuuuuuuuuuuuuuuuuuuuuuuuu()方法或
\uuuuuuuuuuu()方法
当使用对象调用时,返回零。[1] 这里是大多数的
被视为错误的内置对象:

  • 定义为false的常量:
    None
    false
  • 任何数字类型的零:
    0
    0.0
    0j
    十进制(0)
    分数(0,1)
  • 空序列和集合:
    '
    ()
    []
    {}
    集()
    范围(0)
除非另有说明,否则具有布尔结果的操作和内置函数始终返回
0
False
表示False,返回
1
True
表示True。(重要例外:布尔运算
始终返回其操作数之一。)


现在
[5]
可能有一个
\uuubool\uuuu()
方法返回
False
,因此它将是False。当前文档中是否有新的位置以某种方式指定非空列表为真?

[5]
是一个
列表
对象。除非您特别重写了内置的
\uuu bool\uu
方法,否则您将获得默认方法。正如文档已经暗示的,这是真实的


更新并没有改变什么,反而扩大了解释范围,涵盖了派生类型和内置类型的其他扩展。

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

由于
列表
的文档没有说明重写
\uuubool\uuu方法,因此它继承了默认行为

要查找所有
列表
操作,请启动。但是,它也指出列表实现了所有的and和sequence操作,因此您需要阅读文档以获得完整的列表。

刚刚找到一个地方,(重点是我的):

6.11。布尔运算

[……]

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


这让我有点不安,因为下一句话与用户定义对象相矛盾,但我接受它。

我得到默认方法了吗?我刚刚测试了它,
list.\uuubool\uuuu
不存在。我想说,如果你不知道,那么文档的普通读者也不知道。因此缺少了一些东西。很好的解决方法:
\uu bool\uu
方法是从父类继承的。然而,这并不能否定你的观点:一般读者不会知道。然而,我觉得一般读者会接受文档的预期含义:默认情况下,示例语义就是您得到的。如果你认为
[5]
应该是错误的,那么你需要采取具体的行动来做到这一点。嗯,
[5].\uuubool\uuuu
也不存在。如果那是遗传的,不是吗?或者你这是什么意思?你将成为一名优秀的、调查性的程序员(或者你已经是一名了)<代码>[5]
是内置类型中的常量;符号的工作方式不同。这不是离题的时间或地点。。。我很想看到你把你的挖掘尝试作为一个单独的问题发布出来!对不起,我一直在说“离题”,但你说符号的工作方式不同是什么意思?我如何看待继承的
\uuuubool\uuuu
方法?您能给我一个指向