True 计算为 1,False 计算为 0。
>>> True is 1
False
>>> True == 1
True
>>>
Bool 是 int 的子类。如PEP-285所述:
6) bool 是否应该从 int 继承?
=> 是的。
在理想世界中,bool 可能更好地实现为知道如何执行混合模式算术的单独整数类型。但是,从 int 继承 bool 极大地简化了实现(部分原因是所有调用 PyInt_Check() 的 C 代码都将继续工作——这对于 int 的子类返回 true)。另外,我相信这在可替换性方面是正确的:需要 int 的代码可以输入 bool,它的行为与 0 或 1 相同。需要 bool 的代码在给定 int 时可能不起作用;例如,3 和 4 为 0,但 3 和 4 在被视为真值时都为真。
这没有太多实际用途,还有其他答案sudo
以及使用布尔值的示例。我认为有一些真实的例子会很好:
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
''
而 not True 的计算结果为 0:
>>> not True == 0
True
其用途分为两类: