【发布时间】:2010-11-29 23:08:22
【问题描述】:
【问题讨论】:
【问题讨论】:
任何事物都可以被检验为真 值,用于 if 或 while 条件或作为布尔值的操作数 下面的操作。以下值 被认为是错误的:
无
错误
任何数字类型的零,例如,
0、0L、0.0、0j。任何空序列,例如,
''、()、[]。任何空映射,例如
{}。用户定义类的实例,如果该类定义了
__nonzero__()或__len__()方法,当该方法返回整数零或布尔值False时。所有其他值都被认为是真的 ——所以许多类型的对象总是真实的。 除非另有说明,否则具有布尔结果的操作和内置函数始终返回 0 或
False为 false 和 1 或True为 true。 (重要的例外:布尔运算“或”和“和”总是返回它们的操作数之一。)
https://docs.python.org/2/library/stdtypes.html#truth-value-testing
如前所述,您可以通过修改非零值来覆盖自定义对象。
【讨论】:
__bool__ 需要被覆盖
更新:删除所有与 Meder 帖子重复的信息
对于 Python __nonzero__ 中的自定义对象以更改其评估方式。在 Python 3.0 中,这是 __bool__(Reference 来自 e-satis)
了解评估的含义很重要。一种含义是当对象显式转换为 bool 或通过其位置隐式转换(在 if 或 while 循环中)。
另一个是==评估。 1==True, 0==False, 没有什么是相等的==。
>>> None==False
False
>>> 1==True
True
>>> 0==False
True
>>> 2==False
False
>>> 2==True
False
最后,对于 is,只有 True 或 False 是它们自己。
【讨论】: