“show_caches”和“adaptive”参数在“dis.dis”函数中起什么作用

Abd*_*P M 8 python python-3.11

Python3.11向该dis.dis函数引入了两个新参数,show_cachesadaptive

>>> 导入磁盘
>>>
>>> 帮助(dis.dis)
模块 dis 中函数 dis 的帮助:

dis(x=无、*、文件=无、深度=无、show_caches=False、自适应=False )
    反汇编类、方法、函数和其他编译对象。

    不带任何参数,反汇编最后一个回溯。

    编译对象目前包括生成器对象、异步生成器
    对象和协程对象,它们都存储它们的代码对象
    在一个特殊的属性中。

这个参数在 python 3.11 中意味着什么?我确实通过将其设置为来检查结果,True但结果与将其设置为相同False

>>> dis.dis("a = 1", show_caches=True, adaptive=True)
  0           0 RESUME                   0

  1           2 LOAD_CONST               0 (1)
              4 STORE_NAME               0 (a)
              6 LOAD_CONST               1 (None)
              8 RETURN_VALUE
>>>
>>>
>>> dis.dis("a = 1")
  0           0 RESUME                   0

  1           2 LOAD_CONST               0 (1)
              4 STORE_NAME               0 (a)
              6 LOAD_CONST               1 (None)
              8 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)

Dee*_*ace 4

show_caches参数在文档的最顶部进行了描述,dis因为可以将其传递给许多模块的函数:

版本 3.11 中的更改:某些指令伴随着一个或多个内联缓存条目,这些条目采用CACHE 指令的形式。这些指令默认是隐藏的,但可以通过传递show_caches=True给任何 dis 实用程序来显示。

adaptive在文档中描述CACHE

该操作码不是实际的指令,而是用于标记解释器的额外空间,以便直接在字节码本身中缓存有用的数据。它会被所有 dis 实用程序自动隐藏,但可以使用show_caches=True.

从逻辑上讲,该空间是前面指令的一部分。许多操作码期望后面跟着确切数量的缓存,并将指示解释器在运行时跳过它们。

填充的缓存可能看起来像任意指令,因此在读取或修改包含加速数据的原始自适应字节码时应格外小心。

3.11 版本中的新功能。

  • 如果有一个带有 CACHE 指令的指令示例来演示这一点,将会很有帮助;目前尚不清楚“dis”是否总是显示“CACHE”指令,或者是否可能显示此类缓存的内容。第二部分确实包含“自适应”一词,但没有引用该名称的参数,因此不清楚该参数应该做什么。 (2认同)