Python中布尔表达式的评估

12 投票
2 回答
17829 浏览
提问于 2025-04-15 14:28

在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(假)

  • 任何数字类型的零,比如 00L0.00j

  • 任何空的序列,比如 ''(空字符串)、()(空元组)、[](空列表)。

  • 任何空的映射,比如 {}(空字典)。

  • 用户自定义类的实例,如果这个类定义了 __nonzero__()__len__() 方法,并且这个方法返回整数零或布尔值 False

其他所有值都被认为是真的——所以很多类型的对象总是被认为是真的。那些返回布尔结果的操作和内置函数,通常会返回 0 或 False 表示假,返回 1 或 True 表示真,除非另有说明。(重要例外:布尔运算“或”和“与”总是返回它们的一个操作数。)

https://docs.python.org/2/library/stdtypes.html#truth-value-testing

正如前面提到的,你可以通过修改非零值来覆盖自定义对象。

撰写回答