在python中从float中减去boolean

jb.*_*jb. 4 python

调试运行我的代码不管怎么说,当我发现基本上减去声明booleanfloat.

然后我尝试在python控制台中关注:

>>> 15.0 - True 
14.0
>>> 15.0 - False
15.0
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释:

Tad*_*eck 6

这是合法的,因为它是以下bool的子类int:

>>> bool.__bases__
(<type 'int'>,)
>>> True == 1
True
>>> False == 0
True
Run Code Online (Sandbox Code Playgroud)

是的,它有一些实际应用.例如,在引入三元语句之前可以执行类似的操作:

result = [value_if_false, value_if_true][condition]
Run Code Online (Sandbox Code Playgroud)

这基本上可以在这段代码中完成:

if condition:
    result = value_if_false
else:
    result = value_if_true
Run Code Online (Sandbox Code Playgroud)

其他实际用途是:


Pav*_*sov 4

  • http://docs.python.org/3/library/stdtypes.html#boolean-values

    布尔值是两个常量对象 False 和 True。它们用于表示真值(尽管其他值也可以被视为假或真)。

    在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别类似于整数 0 和 1。

  • 现在不是这样,但你可以写

    result = numeric_value * a_bool (这个被大量使用,例如在着色器语言中)

    代替

    result = numeric_value if a_bool else 0

    或者

    result = (value_if_false, value_if_true)[a_bool]

    但不要这样做。

这主要是具有较低级语言经验的人所期望的,为什么要从他们身上夺走这一点呢?在 C 中,true 和 false 仍然是 1 和 0 的宏。

在 2.3 之前,Python 中也没有bool类型,因此当引入它时,将其作为 的子类,int以确保没有代码被破坏。