【问题标题】:Boolean Operations on Non Boolean variables非布尔变量的布尔运算
【发布时间】:2020-08-22 17:07:16
【问题描述】:
a = 5
b = -1
c = 2

print((c) and (b<0) and (a>0))

以下代码的输出是True。但是(c) and (b&lt;0) 不是andor 用于c 是整数的布尔类型变量是什么意思?

【问题讨论】:

    标签: python boolean boolean-logic boolean-expression


    【解决方案1】:

    在像 C 这样的语言中,没有布尔类型或值;相反,整数被用来代替它们。零为假,所有其他整数为真。

    Python 将其推广到 所有 值。确实,有一个布尔类型,但它是int 的子类,TrueFalse字面上分别是值10。通过在其上调用bool,任何值都可以转换为布尔值。

    >>> bool(5)
    True
    >>> bool(0)
    False
    >>> bool("foo"), bool([1,2,3])
    True, True
    >>> bool(""), bool([])
    False, False
    

    一个值的“真实性”取决于它的类型,但粗略地说,零和类似空容器的值是 False,而所有其他值都是 True。此外,andor 不一定返回布尔值:

    x and y == y if bool(x) else x
    x or y == x if bool(x) else y
    

    bool 用于判断x 是否为真,但结果是xy 两个实际值之一。

    使用and 的等价性,我们可以将您的表达式计算为

    c and b<0 and a>0 == (b < 0 if bool(c) else c) and a > 0
                      == b < 0 if bool(2) else c) and a > 0
                      == (b < 0 if True else c) and a > 0
                      == b < 0 and a > 0
                      == a > 0 if bool(b < 0) else b < 0
                      == a > 0 if bool(-1 < 0) else b < 0
                      == a > 0 if bool(True) else b < 0
                      == a > 0 if True else b < 0
                      == a > 0
                      == 5 > 0
                      == True
    

    我没有同时替换abc 的值,因为andor 和条件表达式都是惰性;除非绝对必要,否则它们不会计算操作数,稍后我们会看到。

    如果您更改c = 0,评估过程会生成c 的值,而不是c 的布尔值。请注意,我们需要查看a 的值,因为从未评估过a &gt; 0

    c and b<0 and a>0 == (b < 0 if bool(c) else c) and a > 0
                      == (b < 0 if bool(0) else c) and a > 0
                      == (b < 0 if False else c) and a > 0
                      == c and a > 0
                      == a > 0 if bool(c) else c
                      == a > 0 if bool(0) else c
                      == a > 0 if False else c
                      == c
                      == 0
    

    【讨论】:

      【解决方案2】:

      在 python 中,可以测试任何对象的真值。对于数字类型,任何非零值都被视为真。可以看到不同类型的真值here

      【讨论】:

        【解决方案3】:

        当一个变量不是 bool 并且你检查它是 TrueFalse 时,python 检查这个变量是否为 None。

        例如:

            a = 'any_value'
            print(a == True)
        

        此语句打印True

        但是:

            b = None
            print(a == True)
        

        False 中的结果。

        【讨论】:

        • 事实上,Python 不仅仅是检查它是否为 None,请参阅 Truth Value Testing
        • 很好,不知道这个!谢谢!
        猜你喜欢
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 2013-02-07
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-27
        • 2011-03-27
        相关资源
        最近更新 更多