我见过以下几种情况:
>>> 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
或while
条件中使用,或作为下面布尔操作符的运算数。以下值被认为是假的:
None
False
任何数字类型的零,例如:
0
、0.0
、0j
。任何空序列,例如:
''
、()
、[]
。任何空映射,例如:
{}
。如果类定义了
__bool__()
或__len__()
方法,并且该方法返回整数零或布尔值False
,则用户自定义类的实例也被视为假。所有其他值都被认为是真的——因此许多类型的对象始终是真的。
1 … 除非它们具有引发异常或返回True
或False
以外的值的__bool__()
方法。前者不寻常,但有时是合理的行为(例如,请参阅下面的user2357112的评论);后者则不是。
if a:
时,等同于if bool(a):
。所以这并不意味着a is True
,只是a
作为布尔值的表示是True
。bool
是int
的子类,其中True == 1
且False == 0
。