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