在Python中评估布尔表达式

Cas*_*ash 11 python boolean object

对象在Python中评估的真值是什么?

相关问题

med*_*iev 20

可以测试任何对象的真值,用于if或while条件或作为下面布尔运算的操作数.以下值被视为false:

  • 没有

  • 任何数字类型,例如零,0,0L,0.0,0j.

  • 任何空序列,例如'',(),[].

  • 例如,任何空映射{}.

  • 用户定义的类的实例,如果类定义了一个__nonzero__()__len__()方法,则该方法返回整数零或bool值False.

所有其他值都被认为是真的 - 因此许多类型的对象始终是真的.除非另有说明,否则具有布尔结果的操作和内置函数始终返回0或0 False和0或为true True.(重要的例外:布尔运算"或"和"和"总是返回其中一个操作数.)

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

如上所述,您可以通过修改非零来覆盖自定义对象.

  • 你引用的文档是不精确的(或不完整的); 例如,集合既不是序列也不是映射,但是,当它们为空时,它们也是假的.我会将这两行(也包括集合的情况)折叠为"任何空**容器**". (8认同)
  • 只需要注意,在Python 3.0中,需要重写`__ bool__` (6认同)

Cas*_*ash 9

更新:删除了Meder帖子的所有重复信息

对于Python <3.0中的自定义对象,__nonzero__可以更改其评估方式.在Python 3.0中这是__bool__(参考 e-satisf)

了解评估的含义非常重要.一个含义是当一个对象显式地转换为bool或由其位置隐式转换时(在if或while循环中).

另一个是==评估.1 == True,0 == False,其他任何东西都不等于==.

>>> None==False
False
>>> 1==True
True
>>> 0==False
True
>>> 2==False
False
>>> 2==True
False
Run Code Online (Sandbox Code Playgroud)

最后,对于is,只有True或False本身.