标准库自带了许多模块,这些模块既可以作为模块使用,也可以作为命令行工具使用。
dis 模块
dis
模块是 Python 的反汇编器。它可以将字节码转换为更易于人类阅读的格式。
你可以在命令行中运行反汇编器。它会编译给定的脚本并将反汇编后的字节码打印到标准输出。你也可以将 dis
作为模块来使用。dis
函数接收一个类、方法、函数或代码对象作为其单一参数。
示例
import dis
def sum():
vara = 10
varb = 20
total = vara + varb
print("vara + varb = %d" % total)
dis.dis(sum)
这会产生如下结果:
3 0 LOAD_CONST 1 (10)
2 STORE_FAST 0 (vara)
4 4 LOAD_CONST 2 (20)
6 STORE_FAST 1 (varb)
6 8 LOAD_FAST 0 (vara)
10 LOAD_FAST 1 (varb)
12 BINARY_ADD
14 STORE_FAST 2 (total)
7 16 LOAD_GLOBAL 0 (print)
18 LOAD_CONST 3 ('vara + varb = %d')
20 LOAD_FAST 2 (total)
22 BINARY_MODULO
24 CALL_FUNCTION 1
26 POP_TOP
28 LOAD_CONST 0 (None)
30 RETURN_VALUE
pdb 模块
pdb
模块是标准的 Python 调试器。它是基于 bdb
调试框架的。
你可以在命令行中运行调试器(输入 n [或 next] 进入下一行,帮助获取可用命令的列表):
示例
在尝试运行 pdb.py
之前,请正确设置你的路径到 Python lib 目录。让我们尝试上面的 sum.py
示例:
$pdb.py sum.py
> /test/sum.py(3)<module>()
-> import dis
(Pdb) n
> /test/sum.py(5)<module>()
-> def sum():
(Pdb) n
>/test/sum.py(14)<module>()
-> dis.dis(sum)
(Pdb) n
6 0 LOAD_CONST 1 (10)
3 STORE_FAST 0 (vara)
7 6 LOAD_CONST 2 (20)
9 STORE_FAST 1 (varb)
9 12 LOAD_FAST 0 (vara)
15 LOAD_FAST 1 (varb)
18 BINARY_ADD
19 STORE_FAST 2 (total)
10 22 LOAD_CONST 3 ('vara + varb = %d')
25 LOAD_FAST 2 (total)
28 BINARY_MODULO
29 PRINT_ITEM
30 PRINT_NEWLINE
31 LOAD_CONST 0 (None)
34 RETURN_VALUE
--Return--
> /test/sum.py(14)<module>()->None
-v dis.dis(sum)
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb)
profile 模块
profile
模块是标准的 Python 性能分析器。你可以在命令行中运行性能分析器:
示例
让我们尝试对以下程序进行性能分析:
vara = 10
varb = 20
total = vara + varb
print("vara + varb = %d" % total)
现在,尝试在 sum.py
文件上运行 cProfile.py
:
$cProfile.py sum.py
vara + varb = 30
4 function calls in 0.000 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 sum.py:3(<module>)
1 0.000 0.000 0.000 0.000 {execfile}
1 0.000 0.000 0.000 0.000 {method ......}
tabnanny 模块
tabnanny
模块检查 Python 源文件是否有模糊的缩进。如果一个文件混合使用了制表符和空格导致缩进错乱,无论你使用什么制表符大小,nanny
都会抱怨。
示例
让我们尝试对以下程序进行检查:
vara = 10
varb = 20
total = vara + varb
print("vara + varb = %d" % total)
如果你尝试用 tabnanny.py
检查一个正确的文件,它不会报错,如下所示:
$tabnanny.py -v sum.py
'sum.py': Clean bill of health.