【发布时间】:2011-02-15 09:08:15
【问题描述】:
是否保证 False == 0 和 True == 1 在 Python 中(假设它们没有被用户重新分配)?例如,是否以任何方式保证以下代码将始终产生相同的结果,无论 Python 的版本是什么(现有的和可能的未来版本)?
0 == False # True
1 == True # True
['zero', 'one'][False] # is 'zero'
任何对官方文档的参考将不胜感激!
编辑:正如许多答案中所述,bool 继承自 int。因此,问题可以改写为:“文档是否正式说程序员可以依赖从整数继承的布尔值,具有值0 和1?”。这个问题与编写不会因实现细节而失败的健壮代码有关!
【问题讨论】:
-
@S.Lott:提出上述问题的原因有很多。因此,在某些情况下,依赖布尔值是整数会使您的代码更简单:您必须更改它吗?或者,您可能会在其他人编写的代码中发现依赖布尔值是整数的地方:您是否会中断您在代码中修改的内容以“修复”现有代码,或者您可以放心当前的编码是正确的?还有很多其他的例子。通俗点来说,就是了解游戏规则,才能玩的好,编程的好。
-
@S.Lott:原帖正好呼应了您的观点:问题本质上是“这是一个实现细节吗?”,因为我完全同意您的观点,即不应依赖于实现细节。如果布尔值是已知值的正式整数,那么问题中的代码不依赖于实现细节,这很好。
-
@S.很多:知道 False==0 和 True==1 可以更容易地计算一个序列中有多少个布尔值是真的:你可以写
sum(bool_list)。否则,你必须写sum(1 for x bool_list if x)。 -
@dan:这是计算布尔值的一种方法。我想说
bool_list.count(True)更明确;它也快了大约 3 倍……:) -
@akonsu 正如答案所示,Python 布尔值 是 实际上是整数(一个特定的子类)。此外,Python 显然 具有 类型;也许您的意思是它“不是静态类型的”?另外,我不确定“我不会在代码中出错”是什么意思。现在,我从不喜欢将布尔值与整数混合,因为它们在概念上是不同的,如果 Python 布尔值不是整数,我不介意,但知道它们的值为 0 和 1 是有用的。
标签: python boolean equality language-specifications