Sve što trebate znati o Evalu u Pythonu



Ovaj će vam članak pružiti detaljno i sveobuhvatno znanje o Evalu u Pythonu, Njegovim nedostacima i primjerima.

Kamo god se osvrnete oko sebe, pronaći ćete aplikaciju koja je posebno stvorena da udovolji vašim potrebama. Iako postoji mnogo programskih jezika koji se mogu koristiti za razvoj tih aplikacija, većina ih je izgrađena pomoću . Python zajedno sa svojim sjajnim značajkama i povećanom svestranošću donosi na stol jedinstvenu ponudu koja je istovremeno moćna i izuzetno korisna. U ovom članku Eval in Python razgovarat ćemo o sljedećim točkama:

Što je Eval u Pythonu?

Funkcija eval u Pythonu jedna je od najzanimljivijih opcija. Neki to nazivaju hakiranjem, a neki prečacem, ali na bilo koji način to možete iskoristiti za pokretanje programa Python unutar Python koda. Prilično cool zar ne?





Kada koristite funkciju eval, u osnovi potičete tumača da se pokrene zatvoreno u zagradu funkcije eval.

PythonLogo- Eval u PythonuSintaksa korištenja funkcije eval u Pythonu je:



eval (izraz, globalno = Nijedno, lokalno = Nijedno)

U gornjoj sintaksi,

  1. Izraz: To je niz ili dio koda koji se raščlanjuje i procjenjuje kao Python izraz unutar samog programa Python.



  2. Globalno: Rječnik je taj koji se koristi za definiranje svih globalnih metoda dostupnih za izvršavanje gore spomenutog izraza. Ovo je neobavezna cjelina i njezina uporaba ovisi o vašim potrebama.

  3. Mještani: Slično globalima, ovo je još jedan rječnik koji se koristi za određivanje dostupnih lokalnih metoda kao i varijabli.

    fibonaccijev niz u c ++

Da biste bolje razumjeli upotrebu ove funkcije, pogledajte primjer u nastavku.

iz matematičkog uvoza * def secret_function (): return 'Tajni ključ je 1234' def function_creator (): # izraz koji se procjenjuje expr = raw_input ('Unesite funkciju (u smislu x):') # varijabla koja se koristi u izrazu x = int (raw_input ('Unesite vrijednost x:')) # procjenjuje izraz y = eval (expr) # ispis procjenjuje rezultat ispis ('y = {}'. format (y)) ako je __name__ == '__main__': function_creator ()

U gornjem primjeru, function_creator je funkcija koja će procijeniti matematičke izraze koje je korisnik stvorio kada se program izvršava.

Izlaz:

Unesite funkciju (u smislu x): x * (x + 1) * (x + 2)

Unesite vrijednost x: 3

y = 60

Analiza

Sad kad ste pogledali gore podijeljeni kod, dopustite nam da ga malo dalje analiziramo.

  1. Gornja funkcija uzet će bilo koju varijablu u izrazu x kao svoj ulaz.

  2. Jednom kada se izvrši, od korisnika će se zatražiti da unese vrijednost za x, tek nakon čega će se generirati rezultat za program.

  3. Konačno, program Python izvršit će funkciju eval raščlanjivanjem datotekeeksprkao argument.

Nedostaci Evala

Slično ostalim ugrađenim funkcijama Pythona, i eval dolazi s nekoliko nedostataka koji bi mogli stvoriti problem ako se ne uzmu u obzir.

Ako pogledate gornji primjer, jedna od glavnih ranjivosti funkcije, function_creator je ta da ona može izložiti sve skrivene vrijednosti u programu, a također pozvati štetnu funkciju jer će eval po defaultu izvršiti sve što se nalazi u njenoj zagradi.

Da biste to dalje razumjeli, pogledajte primjer u nastavku.

Ulaz od korisnika

Unesite funkciju (u smislu x): secret_function ()

Unesite vrijednost x: 0

Izlaz:

y = Tajni ključ je 1234

Sljedeća opasna situacija koja dolazi s korištenjem funkcije eval je uvoz os modula. Kada uvezete os modul, omogućuje Pythonu čitanje i pisanje svih datoteka prisutnih u vašem matičnom sustavu bez provjere autentičnosti od korisnika. U takvom slučaju, ako pogrešno upišete singlretka koda, sve će se vaše izvorne datoteke izbrisati.

Rješenje svih ovih nedostataka leži u ograničavanju mogućnosti eval funkcije.

Učiniti Eval sigurnim u Pythonu

Standardno Eval dolazi s opcijom raščlanjivanja bilo koje funkcije kojoj ima pristup ili bilo koje već definirane. Imajući ovo na umu tijekom pisanja koda, u znatnoj će se mjeri ograničiti mogućnosti evala, osiguravajući tako da ništa ne krene po zlu.

Da biste dalje razumjeli ovaj koncept, pogledajte primjer u nastavku.

iz matematičkog uvoza * def secret_function (): return 'Tajni ključ je 1234' def function_creator (): # izraz koji se procjenjuje expr = raw_input ('Unesite funkciju (u smislu x):') # varijabla koja se koristi u izrazu x = int (raw_input ('Unesite vrijednost x:')) # prosljeđivanje varijable x u sigurnom rječniku safe_dict ['x'] = x # procjena izraza y = eval (ekspr, {'__builtins __': None}, safe_dict) # ispis evaluirani ispis rezultata ('y = {}'. format (y)) ako je __name__ == '__main__': # popis sigurnih metoda safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' stupnjevi ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # stvaranje rječnika sigurnih metoda safe_dict = dict ([(k, lokalno stanovništvo (). get (k, Nijedno)) za k na sigurnom_popisu]) function_creator ()

Ulaz od korisnika

kako pretvoriti dvostruko u cijeli broj u javi -

Unesite funkciju (u smislu x): secret_function ()

Unesite vrijednost x: 0

Izlaz:

NameError: ime 'tajna_funkcija' nije definirano

Kao što možete vidjeti ograničavanjem pristupa evala, poništene su šanse za pogrešan izlaz koji se može pokazati štetnim.

Uporabe Evala

Kao što je objašnjeno u gornjim odjeljcima, zbog nekoliko sigurnosnih razloga eval nije toliko često korišten. No, ipak postoje posebni slučajevi upotrebe kada se uporaba evala pokaže korisnom. Neki od najznačajnijih od njih su.

  1. Ako želite da korisnik unese vlastite skripte kako bi modificirao izlaz programa, tada će se upotreba funkcije eval pokazati korisnom.

  2. Dok pišete izraze za rješavanje matematičkih upita, možete koristiti eval jer je to puno lakše od pisanja parsera izraza.

Sad kad znate sve o evalu, nadamo se da ćete ga iskoristiti u svakodnevnom programiranju, imajući na umu prednosti i nedostatke.

Ovime smo došli do kraja ovog članka Eval in Python. Možete dobiti detaljno znanje o Pythonu, zajedno s raznim aplikacijama za mrežni trening uživo s podrškom 24/7 i doživotnim pristupom.

Imate pitanje za nas? Spomenite ih u odjeljku za komentare 'Eval u Pythonu' i javit ćemo vam se.