Python中的幻数

Magic Number in Python

本问题已经有最佳答案,请猛点这里访问。

在以下代码中:

1
2
3
4
5
6
7
magicnumber = 256
for n in range (500):
    if n is magicnumber:
        print ("the magic number is" , n)
        break
    else:
        print(n)

循环中断为256,但如果将magicnumber设置为257,则不会。为什么?


因为你在用is检查identity(而不是用==检查equality)。

作为实现细节,python为所有整数保留一个整数对象数组在-5到256之间,当您在该范围内创建一个int时,实际上只需返回对现有对象的引用。

所以256以上的整数仍然是equal,而不是identical(除非它们指向同一个对象,你可以将它与id()进行比较)。

资料来源:https://docs.python.org/3/c-api/long.html c.pylong fromlong