# 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](https://www.ionos.it/hosting/deploy-now "Deploy Now » Progetta e sostituisci con GitHub") 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.

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

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

<table>
  <thead>
    <tr>
      <th><strong>Parametro</strong></th>
      <th><strong>Opzionale</strong></th>
      <th><strong>Descrizione</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>source</td>
      <td>no</td>
      <td>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.</td>
    </tr>
    <tr>
      <td>filename</td>
      <td>no</td>
      <td>Serve a indicare il file sorgente dell’oggetto da compilare. In mancanza di un file, è possibile scrivere ciò che desiderate. Il parametro è comunque obbligatorio.</td>
    </tr>
    <tr>
      <td>mode</td>
      <td>no</td>
      <td>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.</td>
    </tr>
    <tr>
      <td>flags</td>
      <td>sì</td>
      <td>Permette di indicare l’esatta modalità di compilazione della sorgente. Nella maggioranza dei casi applicativi è comunque possibile ignorare i flag.</td>
    </tr>
    <tr>
      <td>dont\_inherit</td>
      <td>sì</td>
      <td>Esattamente come per flag, il parametro dont\_inherit serve a specificare la compilazione della vostra sorgente.</td>
    </tr>
    <tr>
      <td>optimize</td>
      <td>sì</td>
      <td>Nel parametro optimize è possibile determinare il livello di ottimizzazione del vostro processo di compilazione.</td>
    </tr>
  </tbody>
</table>

## Utilizzo di Python compile

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

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

Per prima cosa, definite la variabile di nome codeAsString, che conterrà il seguente semplice codice Python sotto forma di [stringa in Python](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/stringhe-in-python/ "Stringhe in Python"):

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

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:

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

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](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/python-print/). 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:

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

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.


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/python-compile/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/python-compile/) for AI/LLM consumption.