Python标准库dis — Disassembler for Python bytecode,作用是把python代码反汇编为字节码指令

Python 代码是先被编译为字节码后,再由Python虚拟机来执行字节码,Python的字节码是一种类似汇编指令的中间语言, 一个Python语句会对应若干字节码指令,虚拟机一条一条执行字节码指令,从而完成程序执行。 Python dis 模块支持对Python代码进行反汇编,生成字节码指令。

dis可以在命令行中执行:

python -m dis xxx.py

也可以import dis包使用:

示例1:

>>> import dis
>>> dis.dis('s[a] += b')
  1           0 LOAD_NAME                0 (s)
              3 LOAD_NAME                1 (a)
              6 DUP_TOP_TWO
              7 BINARY_SUBSCR
              8 LOAD_NAME                2 (b)
             11 INPLACE_ADD
             12 ROT_THREE
             13 STORE_SUBSCR
             14 LOAD_CONST               0 (None)
             17 RETURN_VALUE

示例2:

>>> from dis import dis
>>> dis('{1}')
  1           0 LOAD_CONST               0 (1)
              3 BUILD_SET                1
              6 RETURN_VALUE
>>> dis('set([1])')
  1           0 LOAD_NAME                0 (set)
              3 LOAD_CONST               0 (1)
              6 BUILD_LIST               1
              9 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             12 RETURN_VALUE

有时需要分析代码的执行过程,dis是一个很好的分析工具。Python是用C来实现的,所以对于Python的性能或代码质量的评估可以通过dis模块获取到对应的字节码指令来进行评估。