【问题标题】:Evaluation of boolean expressions in PythonPython中布尔表达式的求值
【发布时间】:2010-11-29 23:08:22
【问题描述】:

对象在 Python 中求值的真值是多少?

相关问题

【问题讨论】:

    标签: python object boolean


    【解决方案1】:

    任何事物都可以被检验为真 值,用于 if 或 while 条件或作为布尔值的操作数 下面的操作。以下值 被认为是错误的:

    • 错误

    • 任何数字类型的零,例如,00L0.00j

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

    • 任何空映射,例如{}

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

    所有其他值都被认为是真的 ——所以许多类型的对象总是真实的。 除非另有说明,否则具有布尔结果的操作和内置函数始终返回 0 或 False 为 false 和 1 或 True 为 true。 (重要的例外:布尔运算“或”和“和”总是返回它们的操作数之一。)

    https://docs.python.org/2/library/stdtypes.html#truth-value-testing

    如前所述,您可以通过修改非零值来覆盖自定义对象。

    【讨论】:

    • 只需要注意,在 Python 3.0 中 __bool__ 需要被覆盖
    • 您引用的文档不准确(或不完整);例如,集合既不是序列也不是映射,但是,当它们为空时,它们也是错误的。我会将这两行(也包括集合的情况)折叠为“任何空的容器”。
    【解决方案2】:

    更新:删除所有与 Meder 帖子重复的信息

    对于 Python __nonzero__ 中的自定义对象以更改其评估方式。在 Python 3.0 中,这是 __bool__Reference 来自 e-satis)

    了解评估的含义很重要。一种含义是当对象显式转换为 bool 或通过其位置隐式转换(在 if 或 while 循环中)。

    另一个是==评估。 1==True, 0==False, 没有什么是相等的==。

    >>> None==False
    False
    >>> 1==True
    True
    >>> 0==False
    True
    >>> 2==False
    False
    >>> 2==True
    False
    

    最后,对于 is,只有 True 或 False 是它们自己。

    【讨论】:

    • 自定义对象可以通过实现 nonzero 返回 True/False 进行布尔评估
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 2016-04-06
    相关资源
    最近更新 更多