51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Python 打印函数字节码

查看字节码可以帮助我们更好的理解python的执行流程,本文记录 python 生成函数字节码的方法。

简介 {#简介}

  • 既然叫"字节码",这些操作码自然是以字节为单位的咯,于是最多只能表示256个不同的操作码。Python实际上只用了百来个操作码。
  • 操作码小于90的为无参数的,指令仅包含操作码自身,共1字节;大于等于90的,则每条指令在操作码之后还带有1个参数,参数长度为2字节,共3字节。
  • Python程序的字节码在运行时以PyStringObject的形式保存在PyCodeObject的co_code域里。co_code域只含有指令而不包含别的程序数据;变量名、常量等数据均放在别的域里。
  • Python的字节码指令集是基于栈的指令集。这里说的"栈"不是指函数调用栈,而是指专门用于求值的栈,可以称为"求值栈"(evaluation stack)或者"操作数栈"(operand stack)。求值过程的临时变量都放在求值栈上,指令集中的大部分都是与栈打交道。

实现方法 {#实现方法}

  • 打印函数字节码主要用到 python dis 库

查看模块中所有函数和所有类中的函数字节码 {#查看模块中所有函数和所有类中的函数字节码}

查看模块中某函数或类中某函数生成的字节码: {#查看模块中某函数或类中某函数生成的字节码:}

查看函数外的操作: {#查看函数外的操作:}

示例 {#示例}

  • 将简单的函数转化为字节码:
  • 字节码

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/coding/python/python-bytecode/python-bytecode/

赞(0)
未经允许不得转载:工具盒子 » Python 打印函数字节码