Python - 工具/实用程序



标准库附带了许多模块,这些模块既可以用作模块,也可以用作命令行实用程序。

dis 模块

dis 模块是 Python 反汇编器。它将字节码转换为更适合人类使用的格式。

您可以从命令行运行反汇编程序。它编译给定的脚本并将反汇编的字节码打印到 STDOUT。您也可以将 dis 用作模块。dis 函数将类、方法、函数或代码对象作为其单个参数。


import dis
def sum():
	 	vara = 10
	 	varb = 20

	 	sum = vara + varb
	 	print ("vara + varb = %d" % sum)

# Call dis function for the function.
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 (sum)

  7          16 LOAD_GLOBAL              0 (print)
             18 LOAD_CONST               3 ('vara + varb = %d')
             20 LOAD_FAST                2 (sum)
             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 (sum)

	 10 	 	 	 	 22 LOAD_CONST 	 	 	 	 	 	 	 3 ('vara + varb = %d')
	 	 	 	 	 	 	25 LOAD_FAST 	 	 	 	 	 	 	 	2 (sum)
	 	 	 	 	 	 	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
sum = vara + varb
print "vara + varb = %d" % sum

现在,尝试对此文件运行 cProfile.py sum.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 源文件是否存在不明确的缩进。如果文件以一种不会缩进的方式混合制表符和空格,那么无论你使用什么制表符大小,保姆都会抱怨。

让我们尝试分析以下程序 -


vara = 10
varb = 20

sum = vara + varb
print "vara + varb = %d" % sum

如果您尝试使用 tabnanny.py 的正确文件,那么它不会抱怨如下 -

$tabnanny.py -v sum.py
'sum.py': Clean bill of health.