“是”数字的比较

nmo*_*pan 4 python

我接受了 Python 测试,其中一个问题是:应该将什么传递给以下函数,以便它返回True

def fun(x):
    if x + 1 is 1 + x:
        return False
    if x + 2 is not 2 + x:
        return False
    return True
Run Code Online (Sandbox Code Playgroud)

在我看来,这没有多大意义,但我只想知道正确的答案(如果存在这样的答案)。

小智 11

这与 python 如何缓存小数有关:https : //stackoverflow.com/a/48120163/13003236

通常,is用于检查两个变量是否是同一个对象,而不是它们是否具有相同的值。但是,由于 python 缓存小数的方式,调用is从 -5 到 256 的数字与比较它们的效果相同。因此,如果x + 1小于 -5,但x + 2大于或等于-5,则此函数返回 true 。这意味着将 -7 传递给此函数将使其成功。

  • @Trilarion如果你做了`-6 is -6`,那是不同的,因为python为编译单元保留了这个数字。对于 -600000 来说同样如此。 (2认同)