【问题标题】:Strange python 'is' operator in arithmetic [duplicate]算术中奇怪的python'is'运算符
【发布时间】:2014-11-02 22:38:47
【问题描述】:

我在python交互模式下试过这个操作:

>>> (1*1) is 1
True
>>> (377*35) is 13195
False
>>> 377*35
13195
>>> 377*35 is 377*35
False
>>> 1*1 is 1
True

谁能解释为什么 ' (377*35) is 13195 ' 是假的?

提前致谢!

【问题讨论】:

  • 你为什么要在这里使用is
  • 我在做心算,只是尝试直接输入答案而不是按回车键。但是'=='完全没有问题。谢谢。

标签: python


【解决方案1】:

A is B 检查 AB 是否引用同一个对象。它不检查A 是否在数字上等于B

您的示例中行为不同的原因是具有较小值的整数(通常在 -1 和 99 之间) inclusive) 被解释器“实习”——只要结果具有这样的值, 返回具有相同值的现有 short int。

这解释了为什么 is 对于涉及小数的示例返回 True 而对于涉及大数的示例则不返回。

【讨论】:

  • 实习范围是-5到+256(含)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
相关资源
最近更新 更多