Python 3 - Strumenti / Utilità

La libreria standard include una serie di moduli che possono essere utilizzati sia come moduli che come utilità della riga di comando.

Il modulo dis :

Il modulo dis è il disassemblatore di Python. Converte i codici byte in un formato leggermente più appropriato per il consumo umano.

È possibile eseguire il disassemblatore dalla riga di comando. Compila lo script dato e stampa i byte code disassemblati su STDOUT. Puoi anche usare dis come modulo. Ildis funzione accetta una classe, un metodo, una funzione o un oggetto codice come singolo argomento.

Esempio

#!/usr/bin/python3
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)

Ciò produrrebbe il seguente risultato:

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

Il modulo pdb

Il modulo pdb è il debugger Python standard. Si basa sul framework del debugger bdb.

Puoi eseguire il debugger dalla riga di comando (digita n [o successivo] per andare alla riga successiva e aiuto per ottenere un elenco dei comandi disponibili) -

Esempio:

Prima di provare a correre pdb.py, imposta correttamente il tuo percorso alla directory lib di Python. Quindi proviamo con l'esempio sopra 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)

Il modulo del profilo

Il modulo del profilo è il profiler Python standard. Puoi eseguire il profiler dalla riga di comando -

Esempio

Proviamo a profilare il seguente programma:

#!/usr/bin/python3

vara = 10
varb = 20

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

Ora prova a correre cProfile.pysu questo file sum.py come segue:

$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 ......}

Il modulo tabnanny

Il modulo tabnanny controlla i file sorgente Python per il rientro ambiguo. Se un file mescola tab e spazi in un modo che elimina il rientro, indipendentemente dalla dimensione della tabulazione che stai utilizzando, la tata si lamenta:

Esempio

Proviamo a profilare il seguente programma:

#!/usr/bin/python3

vara = 10
varb = 20

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

Se provi un file corretto con tabnanny.py, non si lamenterà come segue:

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