我见过以下情况:
>>> def func(a):
... if a:
... print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False
为什么会出现这种差异?
答案 0 :(得分:6)
Python中的所有对象 1 都有truth value:
可以测试任何对象的真值,以便在
if
或while
条件下使用,或者作为下面布尔运算的操作数。以下值被视为false:
None
False
- 任何数字类型的零,例如
0
,0.0
,0j
。- 任何空序列,例如
''
,()
,[]
。任何空映射,例如
{}
。用户定义类的实例,如果类定义了
__bool__()
或__len__()
方法,则该方法返回整数零或bool值False
。所有其他值都被认为是真的 - 因此许多类型的对象始终为真。
1 ...除非他们有__bool__()
方法引发异常,或者返回True
或False
以外的值。前者是不寻常的,但有时是合理的行为(例如,请参阅下面的user2357112的评论);后者不是。
答案 1 :(得分:2)
当您输入if a:
时,它等同于if bool(a):
。所以它并不意味着a is True
,只有a
表示为布尔值的是True
。
一般来说,bool
是int
的子类,其中True == 1
和False == 0
。