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] 轉到下一行,鍵入 help 獲取可用命令列表):

示例

在嘗試執行 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 原始檔是否有歧義的縮排。如果檔案以某種方式混合了製表符和空格,從而導致縮排錯誤,無論您使用什麼製表符大小,tabnanny 都會報錯。

示例

讓我們嘗試分析以下程式:

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.
廣告