Python LanguageEsecuzione di codice dinamico con `exec` e` eval`


Sintassi

  • eval (espressione [, globals = None [, locals = None]])
  • exec (oggetto)
  • exec (oggetto, globals)
  • exec (oggetto, globals, gente del posto)

Parametri

Discussione Dettagli
expression Il codice dell'espressione come una stringa o un oggetto code
object Il codice dell'istruzione come una stringa o un oggetto code
globals Il dizionario da usare per le variabili globali. Se la gente del posto non è specificata, questo è anche usato per i locali. Se omesso, vengono utilizzati i globals() dell'ambito di chiamata.
locals Un oggetto di mappatura che viene utilizzato per le variabili locali. Se omesso, viene utilizzato invece quello per le globals . Se entrambi vengono omessi, i globals() e i locals() dell'ambito chiamante vengono utilizzati rispettivamente per globals e locals .

Osservazioni

In exec , se i globals sono locals (cioè si riferiscono allo stesso oggetto), il codice viene eseguito come se fosse a livello di modulo. Se globals e locals sono oggetti distinti, il codice viene eseguito come se fosse in un corpo di classe .

Se l'oggetto globals viene passato, ma non specifica la chiave __builtins__ , le funzioni e i nomi incorporati di Python vengono automaticamente aggiunti all'ambito globale. Per sopprimere la disponibilità di funzioni come print o isinstance nell'ambito eseguito, lasciare che le globals abbiano la chiave __builtins__ mappata sul valore None . Tuttavia, questa non è una funzione di sicurezza.

La sintassi specifica di Python 2 non dovrebbe essere utilizzata; la sintassi Python 3 funzionerà in Python 2. Quindi i seguenti moduli sono deprecati: <s>

  • exec object
  • exec object in globals
  • exec object in globals, locals

Esecuzione di codice dinamico con `exec` e` eval` Esempi correlati