5

我见过以下案例:

>>> def func(a):
...     if a:
...         print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False

为什么会出现这种差异?

4

2 回答 2

9

Python 中的所有对象1都有一个真值

可以测试任何对象的真值,用于iforwhile条件或作为以下布尔运算的操作数。以下值被认为是错误的:

  • None

  • False

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

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

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

  • 用户定义类的实例,如果该类定义了一个__bool__()or__len__()方法,当该方法返回整数零或 bool 值时False

所有其他值都被认为是真的——所以许多类型的对象总是真的。


1 ...除非他们有一个__bool__()引发异常的方法,或者返回一个除 or 以外的TrueFalse。前者是不寻常的,但有时是合理的行为(例如,参见下面 user2357112 的评论);后者不是。

于 2017-04-29T06:46:26.520 回答
2

当您键入if a:时,它相当于if bool(a):. 所以这并不意味着a is True,只是a作为布尔值的表示是True

一般来说boolint, whereTrue == 1和的子类False == 0

于 2017-04-29T06:33:06.943 回答