无论如何,在调试我的代码时,我发现声明基本上从boolean
减去了float
。
然后我尝试在python控制台中跟随:
>>> 15.0 - True
14.0
>>> 15.0 - False
15.0
任何人都可以向我解释:
and
,not
和or
执行http://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not)答案 0 :(得分:6)
这是合法的,因为bool
是int
的子类:
>>> bool.__bases__
(<type 'int'>,)
>>> True == 1
True
>>> False == 0
True
是的,它有一些实际应用。例如,在引入三元语句之前可以做类似的事情:
result = [value_if_false, value_if_true][condition]
这基本上可以在此代码中完成:
if condition:
result = value_if_false
else:
result = value_if_true
其他实际用法是:
sum
多张支票/布局来获得等于True
的结果数量,您可以乘以检查结果:
result = can_count_a * a + can_count_b * b
答案 1 :(得分: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
的子类,确保没有代码被破坏。
答案 2 :(得分:2)
True计算结果为1,False计算结果为0.
>>> True is 1
False
>>> True == 1
True
>>>
Bool是int的子类。如PEP-285中所述:
6)bool应该从int继承吗?
=&GT;是。
在一个理想的世界中,bool可能会更好地作为一个独立的实现 知道如何执行混合模式算术的整数类型。 但是,从int继承bool可以极大地简化实现 (部分原因是所有调用PyInt_Check()的C代码都会继续 work - 对于int的子类返回true。另外,我相信 这在可替代性方面是正确的:需要int的代码 可以喂一个布尔,它的行为与0或1相同。代码 要求bool在给出int时可能不起作用;例如,3&amp; 4是0,但当被认为是真值时,3和4都是真的。
这没有任何实际用途,并且sudo
使用bool的例子还有其他答案。我认为有一些真正的示例会很好:
f,b="Fizz","Buzz"
print "\n".join([["",f,b,f+b][(x%3==0) + 2*(x%5==0)] or str(x) for x in range(1,101)])
有问题的部分:
["",f,b,f+b][(x%3==0) + 2*(x%5==0)]
每行返回的选择基于两个布尔表达式,如果两者都为真,我们得到(True) + 2*(True)
,其值为4,这是一个fizzbuzz。一旦你习惯了True == 1
和False == 0
进一步保持主题:
print '\n'.join(['Fizz'*(not i%3) + 'Buzz'*(not i%5) or str(i) for i in range(1, 101)])
这个例子依赖于在python中乘以字符串时会发生什么:
>>> "Noelkd" * False
''
而非True评估为0:
>>> not True == 0
True
今年秋天的用途分为两类:
更难以阅读代码。
参加代码高尔夫比赛。