为什么'is”运算符对于函数内部和外部的非缓存整数的行为不同?

DDD
发布: 2024-11-03 16:52:30
原创
921 人浏览过

Why Does the `is` Operator Behave Differently with Non-Cached Integers Inside and Outside Functions?

is 运算符对非缓存整数的意外行为

问题:

在函数内,is 运算符返回当比较 [-5, 256] 范围之外的两个整数字面量时为 True,但在函数外部进行比较时为 False。为什么会出现这种不一致的情况?

答案:

tl;dr:

Python解释器以代码块为单位执行。功能是单个块,而交互式命令是单独的块。每个块都包含自己的对象,包括整数。因此,函数内部声明的整数指向同一个对象,而函数外部声明的整数则不然。

详细说明:

  • 函数:

    • 代码块在函数内定义。
    • 块内的文字(例如 1000)存储为单个对象。
    • 是检查对象身份,因此函数中的 a is b 返回 True,因为 a 和 b 都指向同一个对象。
  • 交互式命令:

    • 每个命令都作为单独的代码块执行。
    • 每个块中的文字存储为单独的对象。
    • 检查对象身份,并且由于文字的对象不同,a is b 返回 False。

其他观察:

  • 此行为适用于非整数文字(例如浮点文字)。
  • Python 使用字典来存储代码对象中的常量,并在添加新常量之前检查现有常量。

注意事项:

  • 链式语句:当命令链式时(例如,a = b = 1000),它们被解释为单个代码块,导致 True。
  • 模块级别执行:模块级别执行(例如,a = b = 1000)发生在单个代码块内,结果为 True。
  • 可变对象: 不一致不适用于可变对象; a = b = [] 总是会产生 False。

以上是为什么'is”运算符对于函数内部和外部的非缓存整数的行为不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!