dis库是python(默认的CPython)自带的一个库,可以用来分析字节码

例子

首先导入dis库

>>> import dis

然后在repl中,创建一个函数

>>> def add(a, b = 0):

... return a + b

...

>>>

最后将add函数传给dis库的dis函数

>>> dis.dis(add)

2 0 LOAD_FAST 0 (a)

2 LOAD_FAST 1 (b)

4 BINARY_ADD

6 RETURN_VALUE

>>>

repl会返回add函数的字节码.

分析

来看看dis函数的源码

def dis(x=None, *, file=None):

"""Disassemble classes, methods, functions, generators, or code.

With no argument, disassemble the last traceback.

"""

if x is None:

distb(file=file)

return

if hasattr(x, '__func__'): # Method

x = x.__func__

if hasattr(x, '__code__'): # Function

x = x.__code__

if hasattr(x, 'gi_code'): # Generator

x = x.gi_code

if hasattr(x, '__dict__'): # Class or module

items = sorted(x.__dict__.items())

for name, x1 in items:

if isinstance(x1, _have_code):

print("Disassembly of %s:" % name, file=file)

try:

dis(x1, file=file)

except TypeError as msg:

print("Sorry:", msg, file=file)

print(file=file)

elif hasattr(x, 'co_code'): # Code object

disassemble(x, file=file)

elif isinstance(x, (bytes, bytearray)): # Raw bytecode

_disassemble_bytes(x, file=file)

elif isinstance(x, str): # Source code

_disassemble_str(x, file=file)

else:

raise TypeError("don't know how to disassemble %s objects" %

type(x).__name__)

x参数可以是None、Method、Function、Generator、Class、module、Code object、Raw bytecode、Source code,如果x是Method、Function、Generator,只用返回对应的字节码,

如果x是Class或者module,那会返回x的所有元素(先排序)的字节码,这一句代码x.dict.items()有提现.如果x是Code object或者Raw bytecode,或者Source code,那么会调用对应的disassemble函数. disassemble函数是干嘛的呢,顾名思义,就是assemble的反义词, assemble是汇编的意思,那disassemble自然是有一个 反汇编 的意思,当然这里并不是真的反汇编,而是只是输出字节码.

disassemble的函数细节可以自己去看看源码,源码也在dis.py里

源码

pythondis功能_python中dis的用法相关推荐

  1. pythondis功能_python 使用 Dis 模块进行代码性能剖析

    Python代码在执行的时候,会被编译为Python字节码,再由Python虚拟机执行Python字节码.有时候就我们执行python文件的时候会生成一个pyc文件,这个pyc文件即用于存储Pytho ...

  2. python power函数_python中pow函数的用法_python中pow函数用法及功能说明

    幂运算是高更数学的应用学科,是一种关于幂的数学运算.同底数幂相乘,底数不变,指数相加.同底数幂相除,底数不变,指数相减.幂的乘方,底数不变,指数相乘.适用于精确计算领域. 计算机作为精确计算的一种方式 ...

  3. python中pow函数的用法_python中pow函数用法及功能说明

    幂运算是高更数学的应用学科,是一种关于幂的数学运算.同底数幂相乘,底数不变,指数相加.同底数幂相除,底数不变,指数相减.幂的乘方,底数不变,指数相乘.适用于精确计算领域. 计算机作为精确计算的一种方式 ...

  4. python中max函数用法_Python中max函数用法实例分析

    Python中max函数用法实例分析 更新时间:2015年07月17日 15:45:09 作者:优雅先生 这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用 ...

  5. python中的super用法详解_Python中super函数用法实例分析

    本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...

  6. python类初始化导入库_Python中optparser库用法实例详解

    本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常 ...

  7. python中str的index什么意思_python中index的用法是什么

    index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如:>>> t=tuple('Allen') >>> t ('A', 'l', ...

  8. python中enumerate在for循环中用法_python中enumerate的用法实例解析

    在python中enumerate的用法多用于在for循环中得到计数,本文即以实例形式向大家展现python中enumerate的用法.具体如下: enumerate参数为可遍历的变量,如 字符串,列 ...

  9. python编程字典100例_python中字典(Dictionary)用法实例详解

    本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...

最新文章

  1. discuz 删除系统自带的附件上传
  2. 真正拉开人与人之间的差距是什么?
  3. 科幻作家阿西莫夫上世纪预言2019: 计算机彻底变革教育,太空移民进行中
  4. php 扒取网页数据
  5. 设计模式完结(12)-- 代理模式
  6. html显示当前时间_HTML基础教程:超链接的使用
  7. mysql error 1837_MySQL 主从复制错误1837
  8. 关于RadASM使用编译资源脚本功能无法找到指定头文件的解决方案
  9. 一:LAMP 架构简介
  10. powerapps简介
  11. 行测 资料分析 统计术语篇
  12. 【微信小程序宝典】从零开始做微信小程序开发
  13. 苹果手机内存不够白屏
  14. 腾讯云服务器搭建网站详细教程(新版)
  15. linux系统检测硬盘物理损坏,linux系统下检测硬盘上的坏道和坏块
  16. 2021-07-23 N卡显示器亮度设置
  17. Swift-自动引用计数(Automatic Reference Counting)(十四)
  18. 视频图像去模糊常用处理方法
  19. 微服务时代,你还不懂APM?
  20. EasyExcel CellWriteHandler注入CellStyle不生效问题

热门文章

  1. 阿里云服务器购买合同怎么申请
  2. 将字符串转化为字符串数组
  3. 三年的php简历_【完整模板】PHP工程师简历-简洁橙色-1-3年经验-Word简历模板
  4. 详解Unicode与UTF-8、UTF-16、UTF-32.
  5. esp32--无线控制灯
  6. 怎样快速学习一门计算机编程语言?
  7. oracle从序列中查最大id,Oracle序列详解
  8. 北邮数据库实验7mysql_北邮大三下第7次数据库实验报告--mysql
  9. 行为识别笔记:iDT算法用法与代码解析
  10. 虚拟机VMware使用U盘装系统