Tutto quello che devi sapere su Eval in Python



Questo articolo ti fornirà una conoscenza dettagliata e completa di Eval in Python, i suoi svantaggi e gli usi con esempi.

Ovunque ti guardi intorno, troverai un'applicazione che è stata creata appositamente per soddisfare le tue esigenze. Sebbene ci siano molti linguaggi di programmazione che possono essere utilizzati per sviluppare queste applicazioni, la maggior parte di essi sono costruiti utilizzando . Python insieme alle sue grandi caratteristiche e alla maggiore versatilità porta in tavola offerte uniche che sono sia potenti che estremamente utili in ogni momento. In questo articolo Eval in Python discuteremo i seguenti punti:

Cos'è Eval in Python?

La funzione eval in Python è una delle opzioni più interessanti in circolazione. Alcuni lo chiamano hack e altri lo chiamano scorciatoia, ma in entrambi i casi puoi usarlo per eseguire un programma Python all'interno di un codice Python. Abbastanza bello vero?





Quando si utilizza la funzione eval, si sta fondamentalmente invitando l'interprete a eseguire che è racchiuso tra parentesi della funzione eval.

PythonLogo: valutazione in PythonLa sintassi per l'utilizzo della funzione eval in Python è:



eval (espressione, globals = None, locals = None)

crea un array di oggetti java

Nella sintassi sopra,

  1. Espressione: È la stringa o il pezzo di codice che viene analizzato e valutato come un'espressione Python all'interno del programma Python stesso.



  2. Globale: È il dizionario che viene utilizzato per definire tutti i metodi globali disponibili per eseguire l'espressione di cui sopra. Questa è un'entità opzionale e i suoi usi dipendono dalle tue necessità.

  3. Locali: Simile alle globali, questo è un altro dizionario utilizzato per specificare i metodi locali disponibili e le variabili.

Per comprendere meglio l'utilizzo di questa funzione, dai un'occhiata all'esempio seguente.

from math import * def secret_function (): return 'Secret key is 1234' def function_creator (): # espressione da valutare expr = raw_input ('Inserisci la funzione (in termini di x):') # variabile usata nell'espressione x = int (raw_input ('Inserisci il valore di x:')) # valutazione espressione y = eval (expr) # stampa risultato valutato print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

Nell'esempio sopra, function_creator è una funzione che valuterà le espressioni matematiche create dall'utente quando il programma viene eseguito.

Produzione:

Immettere la funzione (in termini di x): x * (x + 1) * (x + 2)

Immettere il valore di x: 3

y = 60

Analisi

Ora che hai visualizzato il codice condiviso sopra, analizziamolo un po 'più a fondo.

  1. La funzione precedente prenderà qualsiasi variabile nell'espressione x come input.

  2. Una volta eseguito, all'utente verrà richiesto di inserire un valore per x, solo dopo di che verrà generato il programma.

  3. Infine, il programma Python eseguirà la funzione eval analizzando il fileexprcome argomento.

Inconvenienti di Eval

Simile ad altre funzioni integrate di Python, anche eval presenta alcuni inconvenienti che potrebbero creare un problema se non tenuti in considerazione.

Se guardi l'esempio sopra, una delle principali vulnerabilità della funzione, function_creator è che può esporre qualsiasi valore nascosto all'interno del programma e anche invocare una funzione dannosa poiché eval per impostazione predefinita eseguirà tutto ciò che si trova tra parentesi.

Per capirlo ulteriormente, dai un'occhiata all'esempio qui sotto.

Input dall'utente

Immettere la funzione (in termini di x): secret_function ()

Immettere il valore di x: 0

Produzione:

y = La chiave segreta è 1234

Un'altra situazione pericolosa che deriva dall'utilizzo della funzione eval è importare il modulo os. Dopo aver importato il modulo os, consente a Python di leggere e scrivere qualsiasi file presente sul tuo sistema nativo senza autenticazione da parte dell'utente. In tal caso, se digiti erroneamente un singoloriga di codice, tutti i file nativi potrebbero essere eliminati.

La soluzione a tutti questi inconvenienti sta nel limitare le capacità della funzione eval.

Rendere Eval in sicurezza in Python

Eval per impostazione predefinita ha la possibilità di analizzare qualsiasi funzione a cui ha accesso o qualsiasi funzione già definita. Tenendolo a mente mentre scrivi il tuo codice, limiterà le capacità di eval in misura considerevole assicurandoti così che nulla vada storto.

Per comprendere ulteriormente questo concetto, dai un'occhiata all'esempio seguente.

from math import * def secret_function (): return 'Secret key is 1234' def function_creator (): # espressione da valutare expr = raw_input ('Inserisci la funzione (in termini di x):') # variabile usata nell'espressione x = int (raw_input ('Immettere il valore di x:')) # passaggio della variabile x nel dizionario sicuro safe_dict ['x'] = x # valutazione dell'espressione y = eval (expr, {'__builtins __': Nessuno}, safe_dict) # stampa risultato valutato print ('y = {}'. format (y)) if __name__ == '__main__': # list of safe methods safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' gradi ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # creazione di un dizionario di metodi sicuri safe_dict = dict ([(k, locals (). get (k, None)) for k in safe_list]) function_creator ()

Input dall'utente

Immettere la funzione (in termini di x): secret_function ()

Immettere il valore di x: 0

Produzione:

NameError: il nome 'secret_function' non è definito

Come puoi vedere limitando l'accesso a eval, le possibilità di un output sbagliato che può rivelarsi dannoso sono state annullate.

Usi di Eval

Come spiegato nelle sezioni precedenti, per diversi motivi di sicurezza eval non è così comunemente usato. Tuttavia, ci sono casi d'uso particolari in cui l'utilizzo di eval si rivela utile. Alcuni dei più significativi di questi sono.

  1. Se si desidera che l'utente immetta i propri scriptlet per modificare l'output del programma, sarà utile utilizzare la funzione eval.

  2. Durante la scrittura di espressioni per risolvere query matematiche, è possibile utilizzare eval in quanto è molto più semplice che scrivere un parser di espressioni.

Ora che sai tutto su eval, speriamo che utilizzerai lo stesso nella tua programmazione quotidiana, tenendo presente i vantaggi e gli svantaggi.

Con questo, arriviamo alla fine di questo articolo Eval in Python. Per ottenere una conoscenza approfondita di Python e delle sue varie applicazioni, puoi farlo per la formazione online dal vivo con supporto 24 ore su 24, 7 giorni su 7 e accesso a vita.

Hai domande per noi? Menzionateli nella sezione commenti di 'Eval in Python' e vi risponderemo.