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.
Per comprendere meglio la funzione compile è utile avere una visione d’insieme dei singoli parametri.
Per prima cosa, definite la variabile di nome codeAsString, che conterrà il seguente semplice codice Python sotto forma di stringa in 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.
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.
Ipotizziamo di avere un file di nome testcode.py contenente un codice Python eseguibile e di volerlo eseguire nel vostro programma:
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.
Hai trovato questo articolo utile?
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)
pythonParametro | 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:
|
flags | sì | Permette di indicare l’esatta modalità di compilazione della sorgente. Nella maggioranza dei casi applicativi è comunque possibile ignorare i flag. |
dont_inherit | sì | Esattamente come per flag, il parametro dont_inherit serve a specificare la compilazione della vostra sorgente. |
optimize | sì | 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)
pythonx = 10
y = 7
res = x * y
print("result = ", res)
pythonPer 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)
pythonEseguendo 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)
pythonQuindi 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.