【问题标题】:What are the true and false criteria for a python object? [duplicate]python对象的真假标准是什么? [复制]
【发布时间】: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


    【解决方案1】:

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

    可以测试任何对象的真值,用于ifwhile 条件或作为以下布尔运算的操作数。以下值被认为是错误的:

    • None

    • False

    • 任何数字类型的零,例如,00.00j

    • 任何空序列,例如''()[]

    • 任何空映射,例如{}

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

    所有其他值都被认为是真——所以许多类型的对象总是真。


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

    【讨论】:

    • 好吧,通常,无论如何。这是文档掩盖运算符重载的更微妙方面的部分之一。您可以创建一个类,尝试获取其真值会引发 TypeError,这有时是合理的,例如对于 NumPy 数组。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 2015-12-05
      • 2017-06-23
      • 1970-01-01
      • 2017-02-20
      • 2018-07-01
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多