我见过以下案例:
>>> def func(a):
... if a:
... print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False
为什么会出现这种差异?
我见过以下案例:
>>> def func(a):
... if a:
... print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False
为什么会出现这种差异?
Python 中的所有对象1都有一个真值:
可以测试任何对象的真值,用于
if
orwhile
条件或作为以下布尔运算的操作数。以下值被认为是错误的:
None
False
任何数字类型的零,例如
0
,0.0
,0j
。任何空序列,例如
''
,()
,[]
.任何空映射,例如
{}
.用户定义类的实例,如果该类定义了一个
__bool__()
or__len__()
方法,当该方法返回整数零或 bool 值时False
。所有其他值都被认为是真的——所以许多类型的对象总是真的。
1 ...除非他们有一个__bool__()
引发异常的方法,或者返回一个除 or 以外的True
值False
。前者是不寻常的,但有时是合理的行为(例如,参见下面 user2357112 的评论);后者不是。
当您键入if a:
时,它相当于if bool(a):
. 所以这并不意味着a is True
,只是a
作为布尔值的表示是True
。
一般来说bool
是int
, whereTrue == 1
和的子类False == 0
。