
La funzione eval() di Python
La funzione eval() di Python esegue l'espressione contenuta in una stringa e ti restituisce il risultato.
eval(stringa)
Il parametro tra le parentesi tonde è una stringa contenente un numero o un'espressione logico-matematica.
La funzione svolge i calcoli e restituisce il risultato numerico.
Attenzione. Questa funzione esegue il contenuto di una stringa e può anche eseguire del codice. Per evitare problemi di sicurezza e di vulnerabilità, ti consiglio di usare la funzione eval() solo quando la stringa ha un'origine affidabile. Quindi, usala con cautela.
Puoi usare questa funzione anche per convertire una stringa in un valore numerico.
Ad esempio, assegna la stringa "-10" alla variabile 's'.
s="-10"
Poi utilizza la funzione eval()
eval(s)
La funzione converte la stringa nel valore numerico -10
-10
Ora utilizza una stringa contenente un'espressione.
Ad esempio "-10+7"
eval("-10+7")
In questo caso la funzione eval() elabora l'espressione e visualizza il risultato -3
-3
La funzione eval() può elaborare anche una stringa che contiene delle variabili.
Ad esempio, assegna alla variabile x il valore numerico intero 7
x=7
Poi elabora la stringa "-10+x" con la funzione eval()
eval("-10+x")
Il risultato in output è sempre -3
-3
Ora utilizza la stringa "0b1010+0o14+0x1f" che somma un valore binario, ottale ed esadecimale.
eval("0b1010+0o14+0x1f")
La funzione eval() converte i valori in decimale, li somma e restituisce il risultato 53
53
Se la stringa è una sequenza di caratteri alfanumerici priva di calcoli, la funzione eval() restituisce la stringa stessa, senza svolgere alcun calcolo. Ad esempio
eval(" 'Hello' ")
Hello
Come ti anticipavo, la funzione eval() può anche eseguire il codice Python.
Il che può causare molti problemi di sicurezza al tuo programma.
Ad esempio, elabora questa stringa con la funzione eval()
eval("print('Hello')")
La funzione eval() elabora l'istruzione print() e stampa sullo schermo la scritta "Hello".
Quindi, esegue il codice Python!
Hello
In generale, ti consiglio di utilizzare eval() solo quando è strettamente necessario, da fonti sicure e con cautela. Inoltre, non eseguire mai stringhe digitate dagli utenti.
Se possibile, cerca alternative più sicure e efficienti per raggiungere lo stesso obiettivo.
In alternativa, puoi usare la funzione ast.literal_eval() che valutare solo espressioni letterali (come tuple, stringhe, numeri) e non esegue codice arbitrario. Inoltre, l'uso eccessivo della eval() può influire negativamente sulle prestazioni del tuo programma, perché interpreta la stringa ogni volta che viene chiamata.