python对象的真假标准是什么?

时间:2017-04-29 06:27:19

标签: python python-3.x truthiness

我见过以下情况:

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

为什么会出现这种差异?

2 个答案:

答案 0 :(得分:6)

Python中的所有对象 1 都有truth value

  

可以测试任何对象的真值,以便在ifwhile条件下使用,或者作为下面布尔运算的操作数。以下值被视为false:

     
      
  • None
  •   
  • False
  •   
  • 任何数字类型的零,例如00.00j
  •   
  • 任何空序列,例如''()[]
  •   
  • 任何空映射,例如{}

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

  •   
     

所有其他值都被认为是真的 - 因此许多类型的对象始终为真。

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

答案 1 :(得分:2)

当您输入if a:时,它等同于if bool(a):。所以它并不意味着a is True,只有a表示为布尔值的是True

一般来说,boolint的子类,其中True == 1False == 0