Python中布尔表达式的评估
2 个回答
9
更新: 删除了与Meder的帖子重复的信息
在Python 3.0之前,如果你想改变自定义对象的布尔值(也就是它在判断真假时的表现),可以使用__nonzero__
这个方法。在Python 3.0中,这个方法变成了__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是它们自己。
24
任何对象都可以用来测试真假值,这在 if 或 while 条件中使用,或者作为下面布尔运算的操作数。以下这些值被认为是假的:
None(空值)
False(假)
任何数字类型的零,比如
0
、0L
、0.0
、0j
。任何空的序列,比如
''
(空字符串)、()
(空元组)、[]
(空列表)。任何空的映射,比如
{}
(空字典)。用户自定义类的实例,如果这个类定义了
__nonzero__()
或__len__()
方法,并且这个方法返回整数零或布尔值False
。其他所有值都被认为是真的——所以很多类型的对象总是被认为是真的。那些返回布尔结果的操作和内置函数,通常会返回 0 或
False
表示假,返回 1 或True
表示真,除非另有说明。(重要例外:布尔运算“或”和“与”总是返回它们的一个操作数。)
https://docs.python.org/2/library/stdtypes.html#truth-value-testing
正如前面提到的,你可以通过修改非零值来覆盖自定义对象。