Python compile: come eseguire codice in Python con questa funzione

Per eseguire direttamente singole righe di codice o un blocco di codice e memorizzarne il risultato in una variabile è possibile utilizzare la funzione compile in Python. La funzione restituisce un oggetto di codice eseguibile.

Possibilità di applicazione

Se desiderate eseguire singole istruzioni di codice non direttamente nel vostro programma in Python, ma semplicemente assegnarle a una variabile, è possibile utilizzare la funzione compile. Questa funzione serve a convertire il codice sorgente in codice oggetto e restituisce un oggetto eseguibile successivamente per mezzo della funzione exec in Python. A questa è anche possibile assegnarvi un file dal quale estrarre il codice sorgente.

Consiglio

Utilizzate Python per realizzare il vostro progetto web con un linguaggio di programmazione efficiente? Allora Deploy Now di IONOS vi aiuterà a lavorare con ancora maggiore efficienza grazie alla possibilità di effettuare il deployment del vostro sito web tramite GitHub quando più lo desiderate. L’anteprima in tempo reale permette di visualizzare lo stato aggiornato del vostro progetto in ogni momento con pochi semplici clic.

La sintassi di Python compile

È possibile eseguire la funzione compile in Python con un massimo di sei parametri diversi; solo i primi tre parametri sono obbligatori. I restanti parametri della funzione sono opzionali e utilizzabili a piacere per specificare il comportamento della funzione.

compile(source, filename, mode, flags = 0, dont_inherit = False, optimize = -1)
python

Per comprendere meglio la funzione compile è utile avere una visione d’insieme dei singoli parametri.

Parametro Opzionale Descrizione
source no Serve a passare l’oggetto che desiderate compilare. Nella maggior parte dei casi si tratta di stringhe, ma è possibile passare anche oggetti byte oppure oggetti AST.
filename no Serve a indicare il file sorgente dell’oggetto da compilare. In mancanza di un file, è possibile scrivere ciò che desiderate. Il parametro è comunque obbligatorio.
mode no Il parametro mode permette di specificare come deve avvenire la compilazione. A vostra disposizione avete i seguenti valori:
  • eval: per valutare singole espressioni.
  • exec: per valutare blocchi di codice.
  • single: per istruzioni singole e interattive.
flags Permette di indicare l’esatta modalità di compilazione della sorgente. Nella maggioranza dei casi applicativi è comunque possibile ignorare i flag.
dont_inherit Esattamente come per flag, il parametro dont_inherit serve a specificare la compilazione della vostra sorgente.
optimize Nel parametro optimize è possibile determinare il livello di ottimizzazione del vostro processo di compilazione.

Utilizzo di Python compile

Un esempio di codice è utile per chiarire il funzionamento di compile in Python:

codeAsString = 'x = 10\ny = 7\nres = x * y\nprint("result = ", res)'
codeObject = compile(codeAsString, ' ', 'exec')
exec(codeObject)
python

Per prima cosa, definite la variabile di nome codeAsString, che conterrà il seguente semplice codice Python sotto forma di stringa in Python:

x = 10
y = 7
res = x * y
print("result = ", res)
python

Non fatevi confondere dalle “\n” nella stringa codeAsString: sono caratteri di controllo per contrassegnare un’interruzione di riga. Come vedete, è possibile memorizzare facilmente il vostro codice Python sotto forma di serie di caratteri in una variabile convenzionale. A questo punto, è necessaria la funzione compile per interpretare il codice non soltanto come una semplice catena di caratteri. L’esecuzione della funzione compile nell’esempio precedente utilizza solo i parametri necessari.

Per iniziare, indicate l’oggetto da compilare, ossia la vostra stringa. Successivamente specificate il file sorgente della vostra stringa. Poiché la stringa è stata definita direttamente nel codice e non caricata da un file, è sufficiente indicare la catena di caratteri vuota. In teoria è comunque possibile utilizzare una qualsiasi catena di caratteri di vostra scelta.

Anche l’ultimo parametro è interessante: poiché la nostra stringa codeAsString è un blocco di codice intero, come mostra la risoluzione della stringa nel secondo esempio di codice, utilizziamo il parametro exec. Ricordate che si tratta di una stringa e non dimenticate le virgolette.

Il risultato della funzione Python compile per l’esempio di codice precedente è assegnato alla variabile di nome codeObjekt. Il nome della variabile svela il suo contenuto: un oggetto di codice. La particolarità di un oggetto di codice è la possibilità di eseguirlo in qualsiasi momento richiamando la funzione exec in Python: esattamente ciò che succede nell’ultima riga di codice, grazie alla quale il programma restituisce “result = 70” come risultato finale.

Compilazione di una singola istruzione

Se desiderate compilare soltanto una singola istruzione di codice, è necessario modificare il terzo parametro di esecuzione della funzione Python compile. Il motivo è l’utilizzo della modalità eval per istruzioni singole. Anche in questo caso è utile un esempio:

singleInstruction = 'print("Hello World!")'
codeObject = compile(singleInstruction, ' ', 'eval')
exec(codeObject)
python

In generale, non ci sono molte differenze. Il risultato è sempre una stringa con codice Python. A differenza dell’esempio precedente, però, in questo caso la stringa contiene solo una singola istruzione print in Python. Pertanto, è necessario utilizzare la modalità eval, che serve a valutare singole istruzioni.

Eseguendo nuovamente il vostro oggetto di codice per mezzo della funzione exec, noterete che tutto funziona come previsto. Il vostro programma mostrerà la scritta “Hello World!” sullo schermo.

Elaborazione di codice sorgente da file sorgente

Negli esempi precedenti abbiamo sempre definito il codice sorgente, da elaborare tramite la funzione Python compile, sotto forma di stringa nel programma stesso. Ma come fare per utilizzare ed eseguire nel vostro programma il codice contenuto in un file? Anche in questo caso è possibile utilizzare la funzione Python compile.

Ipotizziamo di avere un file di nome testcode.py contenente un codice Python eseguibile e di volerlo eseguire nel vostro programma:

tmpFile = open('testcode.py', 'r')
tmpCode = tmpFile.read()
tmpFile.close()
codeObject = compile(tmpCode, 'testcode.py', 'exec')
exec(codeObject)
python

Prima è necessario leggere il codice che desiderate eseguire dal file in cui si trova attualmente. A tal fine, aprite il file con la funzione Python open e con accesso in lettura. Successivamente è possibile utilizzare la funzione Python read per caricare il codice sorgente nella vostra variabile di nome tmpCode e chiudere nuovamente il file aperto all’inizio.

Quindi richiamate la funzione Python compile. A questo punto è importante indicare da dove proviene il codice che desiderate compilare; in questo caso, dal file testcode.py. Successivamente il programma si svolge in modo simile agli esempi precedenti; richiamando quindi la funzione exec potete infine eseguire il codice caricato dal file testcode.py nel vostro programma.

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.