是否保证 False == 0True == 1, ,在Python中(假设他们没有被用户重新分配)?例如,是否以任何方式保证,以下代码始终会产生相同的结果,无论python版本(现有和可能的未来)版本是什么?

0 == False  # True
1 == True   # True
['zero', 'one'][False]  # is 'zero'

对正式文档的任何提及将不胜感激!

编辑: :正如许多答案中指出的那样, bool 继承 int. 。因此,可以重新提出这个问题:“文档是否正式表明程序员可以依靠从整数继承的布尔人, 与值 01?”。这个问题与编写强大的代码有关,该代码由于实现细节而不会失败!

有帮助吗?

解决方案

在Python 2.x中,这是 不是 保证可能有可能 TrueFalse 重新分配。但是,即使发生这种情况,Boolean True和Boolean false仍然可以正确返回以进行比较。

在Python 3.x中 TrueFalse 是关键字,始终等于 10.

在Python 2的正常情况下,始终在Python 3中:

False 对象是类型 bool 这是一个子类 int:

object
   |
 int
   |
 bool

这是您示例中的唯一原因, ['zero', 'one'][False] 确实有效。它不会与不是整数子类的对象,因为索引仅适用于整数或定义一个的对象 __index__ 方法(谢谢 马克·迪金森).

编辑:

当前的python版本和python 3是正确的。 Python的文档2.6Python的文档3 两者都说:

整数有两种类型:[...]整数(int)[...]布尔值(bool)

并在布尔小节中:

布尔人:这些代表真实价值虚假和真实[...]布尔值分别像值0和1一样,在几乎所有上下文中,例外是,当转换为字符串时,字符串“ false”或“ true” “分别返回。

也有 对于Python 2:

在数字上下文中(例如,当用作算术运算符的参数时),它们[false和true]分别像整数0和1一样行为。

因此,布尔人被明确视为Python 2.6和3中的整数。

因此,直到Python 4出现之前,您都是安全的。 ;-)

其他提示

链接到PEP讨论Python 2.3中的新布尔类型: http://www.python.org/dev/peps/pep-0285/.

当将bool转换为int时,整数值始终为0或1,但是当将int转换为bool时,除0以外的所有整数中,布尔值都是正确的。

>>> int(False)
0
>>> int(True)
1
>>> bool(5)
True
>>> bool(-5)
True
>>> bool(0)
False

在Python 2.X中,根本不能保证:

>>> False = 5
>>> 0 == False
False

因此它可能会改变。在python 3.x中,是的,错误,没有 保留的单词, ,因此上述代码将行不通。

通常,使用布尔值,您应该假设虽然false始终具有整数值为0(只要您不更改它,如上所述),True可能具有其他值。我不一定要依靠任何保证 True==1, ,但是在Python 3.X上,无论如何,情况将永远是这种情况。

非常简单。由于Bool与将整数评估为BOOL有关,因此只有零给出了错误的答案。所有非零值,浮点,整数,包括负数或您的内容,都将返回true。

一个很好的例子说明这是有用的,就是确定设备的功率状态。 ON是任何非零值,OFF为零。从电子上讲,这很有意义。

要确定在值之间的真或错误,您必须有一些与之进行比较的东西。这适用于字符串和数值,使用 == 或者 != 或者 <, > >=, <=, , ETC。

您可以将整数分配给变量,然后根据该变量值获得真或错误。

写吧 int(False) 你会得到 0, ,如果您输入 int(True) 它将输出 1

假是一个布尔。它有不同的类型。它与0是一个整数不同的对象。

0 == False 返回true是因为false被铸成整数。 int(false)返回0

==操作员的Python文档说(help('==')):

操作员 <, >, ==, >=, <=, , 和 != 比较两个对象的值。对象不必具有相同的类型。如果两者都是数字,则将它们转换为普通类型。

结果,错误将转换为一个整数,以进行比较。但这与0不同。

>>> 0 is False
False
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top