当前位置: 首页 > 面试题库 >

为什么在Python中1 == True但2!= True?

淳于兴朝
2023-03-14
问题内容

我的交互式控制台的简要记录:

Python 2.7.2 (default, Jun 29 2011, 11:10:00) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> True
True
>>> 0 == True
False
>>> 1 == True
True
>>> 2 == True
False

到底为什么呢?

编辑: 为了对比起见,请考虑is运算符。

>>> 0 is False
False
>>> 1 is True
False
>>> 0 is 0
True
>>> True is True
True

这使得有很大的意义,因为虽然1True都意味着同样的事,作为一个条件if语句,他们真的是不一样的东西。

再次编辑: 更有趣的后果1 == True

>>> d = {}
>>> d[True] = "hello"
>>> d[1]
"hello"

问题答案:

因为Python中的Boolean是整数的子类型。从文档中:

布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以视为假或真)。在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别类似于整数0和1。如果该值可以解释为真值,则可以使用内置函数bool()将任何值转换为布尔值(请参见上面的真值测试部分)。

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



 类似资料:
  • 问题内容: 为什么在Python 2中返回? 是因为当我在数字周围加上单引号时,Python会将其视为字符串并且字符串大于数字吗? 问题答案: 是的,任何数字都将小于Python 2中的任何字符串(包括空字符串)。 在Python 3中,您无法进行任意比较。你会得到一个。 从 eryksun的评论链接中: 因此,至少在最新版本的CPython 2.x中,将比较类型名称,并使用空字符串代替任何数字类

  • 问题内容: 我遇到了这个表达式,我认为应该评估为True,但事实并非如此。 上面的语句按预期工作,但在以下情况下: 执行后,其结果为False。 我尝试搜索答案,但无法获得具体答案。谁能帮助我了解这种行为? 问题答案: 是一个运营商链,就像您 要做到这一点,您需要 和 都是如此。后者是错误的,因此是结果。添加括号不会再使运算符链接(某些运算符在括号中),这可以解释工作原理。 尝试: 再一次,一个很

  • 问题内容: 这个问题引起了有关perl中无限循环的问题:while(1)Vs。for(;;)是否存在速度差异?,我决定在python中运行类似的比较。我希望编译器会为和生成相同的字节码,但是python2.7实际上不是这种情况。 以下脚本: 产生以下结果: 使用明显更复杂。为什么是这样? 在其他情况下,python的行为就好像等于1: 为什么要区分两者? 我注意到python3确实使用相同的操作评

  • 问题内容: 在Python控制台中: 给我: 为什么?有人可以用二进制给我解释这个特殊情况吗? 问题答案: 是。 是: 并且是: 这是在两个补1 1翻转所有位,将1加到结果数上,并将结果解释为幅度的 二进制表示形式 ,并添加一个负号(因为数字以1开头): 它是2,但是由于MSB是1 ,所以符号是负数。 值得一提: 想一想,您会发现它本质上是数字-它有两个值和,它们只是整数1和0的“自定义”版本,它

  • 问题内容: 我真的不明白这是如何解析的。为什么第二个示例返回False? 谢谢你的帮助。我想我一定会错过一些非常明显的东西。 我认为这与链接重复项有细微不同: 为什么表达式0 <0 == 0在Python中返回False? 。 这两个问题都与人类对表达的理解有关。在我看来,似乎有两种评估表达方式的方法。当然,两者都不正确,但是在我的示例中,最后的解释是不可能的。 看着您可以想象每个被评估的部分都可