Python 简明教程

Python - Tools/Utilities

标准库附带 تعدد 模块,可同时用作模块和命令行实用程序。

The dis Module

dis 模块是 Python 反汇编程序。它将字节码转换为稍微适合人类阅读的格式。

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

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)

这将产生以下结果 -

  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 调试器框架。

您可以在命令行中运行调试器(键入 n [或 next] 以转到下一行,并键入 help 以获取可用命令列表)-

Example

在您尝试运行 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)

The profile Module

profile 模块是标准 Python 性能分析器。您可以从命令行中运行性能分析器 -

Example

让我们尝试对以下程序进行性能分析 -

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

现在,尝试按如下方式针对此文件 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 ......}

The tabnanny Module

tabnanny 模块检查 Python 源文件中的二义性缩进。如果某个文件以一种使缩进失效的方式混合使用制表符和空格,无论您使用哪种制表符大小,nanny 都会抱怨。

Example

让我们尝试对以下程序进行性能分析 -

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.