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