Python 简明教程
Python - Tools/Utilities
标准库附带 تعدد 模块,可同时用作模块和命令行实用程序。
The standard library comes with a number of modules that can be used both as modules and as command-line utilities.
The dis Module
dis 模块是 Python 反汇编程序。它将字节码转换为稍微适合人类阅读的格式。
The dis module is the Python disassembler. It converts byte codes to a format that is slightly more appropriate for human consumption.
您可以从命令行中运行反汇编程序。它编译给定的脚本,并将反汇编后的字节码打印至 STDOUT。您还可以将 dis 用作模块。dis 函数将类、方法、函数或代码对象作为其单一参数。
You can run the disassembler from the command line. It compiles the given script and prints the disassembled byte codes to the STDOUT. You can also use dis as a module. The dis function takes a class, method, function or code object as its single argument.
Example
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)
这将产生以下结果 -
This would produce the following result −
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
The pdb Module
pdb 模块是标准 Python 调试器。它基于 bdb 调试器框架。
The pdb module is the standard Python debugger. It is based on the bdb debugger framework.
您可以在命令行中运行调试器(键入 n [或 next] 以转到下一行,并键入 help 以获取可用命令列表)-
You can run the debugger from the command line (type n [or next] to go to the next line and help to get a list of available commands) −
Example
在您尝试运行 pdb.py 之前,请将您的路径正确设置到 Python lib 目录。所以,让我们尝试上面的示例 sum.py -
Before you try to run pdb.py, set your path properly to Python lib directory. So let us try with above example 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)
The profile Module
profile 模块是标准 Python 性能分析器。您可以从命令行中运行性能分析器 -
The profile module is the standard Python profiler. You can run the profiler from the command line −
Example
让我们尝试对以下程序进行性能分析 -
Let us try to profile the following program −
vara = 10
varb = 20
sum = vara + varb
print "vara + varb = %d" % sum
现在,尝试按如下方式针对此文件 sum.py 运行 cProfile.py -
Now, try running cProfile.py over this file sum.py as follow −
$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 ......}
The tabnanny Module
tabnanny 模块检查 Python 源文件中的二义性缩进。如果某个文件以一种使缩进失效的方式混合使用制表符和空格,无论您使用哪种制表符大小,nanny 都会抱怨。
The tabnanny module checks Python source files for ambiguous indentation. If a file mixes tabs and spaces in a way that throws off indentation, no matter what tab size you’re using, the nanny complains.
Example
让我们尝试对以下程序进行性能分析 -
Let us try to profile the following program −
vara = 10
varb = 20
sum = vara + varb
print "vara + varb = %d" % sum
如果您尝试使用 tabnanny.py 尝试一个正确的文件,则它不会抱怨如下 -
If you would try a correct file with tabnanny.py, then it won’t complain as follows −
$tabnanny.py -v sum.py
'sum.py': Clean bill of health.