18.10 dis -- Disassemblatore per il bytecode Python

Il modulo dis permette l'analisi del bytecode Python tramite la sua disassemblatura. Dato che non esiste un assemblatore Python, questo modulo definisce il linguaggio assembly Python. Il bytecode di Python che questo modulo utilizza come input viene definito nel file Include/opcode.h ed utilizzato sia dal compilatore che dall'interprete.

Esempio: Data la funzione myfunc:

def myfunc(alist):
    return len(alist)

il seguente comando può venire utilizzato per ottenere il codice disassemblato di myfunc():

>>> dis.dis(myfunc)
  2           0 LOAD_GLOBAL              0 (len)
              3 LOAD_FAST                0 (alist)
              6 CALL_FUNCTION            1
              9 RETURN_VALUE        
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE

(il ``2'' è il numero di riga).

Il modulo dis definisce le seguenti funzioni e costanti:

dis( [bytesource])
Disassembla l'oggetto bytesource. bytesource può denotare un modulo, una classe, un metodo, una funzione oppure un oggetto codice. Nel caso di un modulo vengono disassemblate tutte le funzioni. Nel caso di una classe vengono disassemblati tutti i metodi. Per una singola sequenza di codice stampa una riga per ogni istruzione bytecode. Se nessun oggetto viene passato come parametro, disassembla l'ultima traceback.

distb( [tb])
Disassembla la funzione in cima alla pila della traceback, utilizzando l'ultima traceback se non ne viene specificata nessuna. Viene indicata l'istruzione che ha causato l'eccezione.

disassemble( code[, lasti])
Disassembla un oggetto codice, indicando l'ultima istruzione se lasti viene definito. L'output viene suddiviso nelle seguenti colonne:

  1. il numero di riga, per la prima istruzione di ogni riga
  2. l'istruzione corrente, indicata da "-->",
  3. un'istruzione con etichetta, indicata da ">>",
  4. l'indirizzo dell'istruzione,
  5. il nome del codice dell'operazione,
  6. i parametri dell'operazione, e
  7. l'interpretazione dei parametri fra parentesi.

Il parametro interpretazione identifica nomi di variabili globali e locali, valori di costanti, destinazioni di operazioni di salto e operatori di confronto.

disco( code[, lasti])
Sinonimo della funzione disassemble. È più facile da scrivere e mantiene la compatibilità con le versioni precedenti di Python.

opname
Sequenza di nomi di operazioni, indicizzabile usando il bytecode.

cmp_op
Sequenza di tutti i nomi delle operazioni di confronto.

hasconst
Sequenza di bytecode che hanno un parametro costante.

hasfree
Sequenza di bytecode che accedono ad una variabile libera.

hasname
Sequenza di bytecode che accede ad un attributo tramite il nome.

hasjrel
Sequenza di bytecode che ha una salto verso una destinazione relativa.

hasjabs
Sequenza di bytecode che ha una salto verso una destinazione assoluta.

haslocal
Sequenza di bytecode che accede ad una variabile locale.

hascompare
Sequenza di bytecode di operazioni booleane.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.