【发布时间】:2020-08-21 00:07:18
【问题描述】:
背景:我要回答this question,以“documentation 指定非空列表为真且 [...]”之类的内容开头。但后来我意识到它不再指定了。至少不是很明显,它曾经如此。
直到 Python 3.5,文档 still said(强调我的):
4.1。真值测试
可以测试任何对象的真值,用于 if 或 while 条件或作为以下布尔运算的操作数。以下 值被认为是错误的:
NoneFalse- 任何数字类型的零,例如,
0、0.0、0j。- 任何空序列,例如,
''、()、[]。- 任何空映射,例如
{}。- 用户定义类的实例,如果该类定义了
__bool__()或__len__()方法,则当该方法返回整数零或bool值False。 [1]所有其他值都被认为是真——因此许多类型的对象总是真。
除非另有说明,否则具有布尔结果的操作和内置函数始终返回
0或False为假,1或True为真。 (重要的例外:布尔运算or和and总是返回它们的操作数之一。)
像[5] 这样的非空列表不属于上述列表中的任何内容,因此“所有其他”指定它为真。
但是从 Python 3.6 开始,这已经不复存在了。那段now says:
真值测试
可以测试任何对象的真值,用于
if或while条件或作为以下布尔运算的操作数。默认情况下,一个对象被认为是真的,除非它的类定义 返回
False的__bool__()方法或__len__()方法 使用对象调用时返回零。 [1] 这里是大部分 内置对象被认为是错误的:
- 定义为假的常量:
None和False。- 任何数字类型的零:
0、0.0、0j、Decimal(0)、Fraction(0, 1)- 空序列和集合:
''、()、[]、{}、set()、range(0)除非另有说明,否则具有布尔结果的操作和内置函数始终返回
0或False为 false,1或True为 true。 (重要的例外:布尔运算or和and总是返回它们的操作数之一。)
现在[5] 可以有一个返回False 的__bool__() 方法,因此它是错误的。当前文档中是否有新的地方以某种方式指定非空列表为真?
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: python