RESUME 操作码实际上有什么作用?

问题描述 投票:0回答:1

文档信息不是很丰富(至少对我来说):

操作码::恢复(上下文)

无操作。执行内部跟踪、调试和优化 检查。

context
操作数由两部分组成。最低两位 指示
RESUME
发生的位置:

  • 0
    函数的开始,它既不是生成器, 协程 也不是异步生成器

  • 1
    yield
    表情之后

  • 2
    yield from
    表情之后

  • 3
    await
    表情之后

如果RESUME位于除深度

1
,则下一位是
1
,并且
0
否则。

示例:

>>> import dis
>>> 
>>> def f(): ...
... 
>>> dis.dis(f)
  1           0 RESUME                   0
              2 LOAD_CONST               0 (None)
              4 RETURN_VALUE

有人可以解释一下这个操作码的真正作用吗?

python cpython python-internals
1个回答
0
投票

我无法提供详尽的答案;但是

RESUME
NOP
操作码的一种,
意味着 它实际上不做任何事情,而是简化了字节码的生成。例如,
pass
是Python中的
NOP

当解释器输入函数时使用

RESUME
NOP。因此,它被用于 1) 在 python 函数的开头,以及 2) 在yield 语句之后。它被放置在yield语句之后,因为带有yield语句的函数实际上并不运行它们的主体代码,而只是返回一个生成器对象(而不是一个可迭代对象)。 如果它对任何人都有帮助,下面链接的博客详细讨论了 python 字节码以及如何查看它:

https://www.synopsys.com/blogs/software-security/understanding-python-bytecode.html

© www.soinside.com 2019 - 2024. All rights reserved.