Vse, kar morate vedeti o Evalu v Pythonu



V tem članku boste našli podrobno in izčrpno znanje o Evalu v Pythonu, pomanjkljivostih in primerih uporabe.

Kamor koli se ozrete, boste našli aplikacijo, ki je bila posebej zasnovana za vaše potrebe. Čeprav obstaja veliko programskih jezikov, ki jih je mogoče uporabiti za razvoj teh aplikacij, je večina njih zgrajena z uporabo . Python skupaj s svojimi odličnimi lastnostmi in večjo vsestranskost na mizo prinaša edinstveno ponudbo, ki je hkrati zmogljiva in izjemno uporabna. V tem članku o Evalu v Pythonu bomo razpravljali o naslednjih točkah:

Kaj je Eval v Pythonu?

Funkcija eval v Pythonu je ena najbolj zanimivih možnosti. Nekateri temu pravijo kramp, drugi pa bližnjico, toda tako ali drugače ga lahko uporabite za zagon programa Python znotraj kode Python. Precej kul kajne?





Ko uporabljate funkcijo eval, v bistvu spodbujate tolmača, naj zažene, ki je zaprt v oklepaju funkcije eval.

PythonLogo - Eval v PythonuSintaksa za uporabo funkcije eval v Pythonu je:



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

V zgornji sintaksi je

  1. Izraz: To je niz ali del kode, ki je razčlenjen in ovrednoten kot izraz Python znotraj samega programa Python.



  2. Globalno: Slovar je tisti, ki se uporablja za definiranje vseh globalnih metod, ki so na voljo za izvajanje zgoraj omenjenega izraza. To je neobvezna entiteta in njene uporabe so odvisne od vaših potreb.

  3. Domačini: Podobno kot pri globalnih, je to še en slovar, ki se uporablja za določanje razpoložljivih lokalnih metod in spremenljivk.

Za boljše razumevanje uporabe te funkcije si oglejte spodnji primer.

from math import * def secret_function (): return 'Secret key is 1234' def function_creator (): # izraz, ki ga je treba ovrednotiti expr = raw_input ('Vnesite funkcijo (v smislu x):') # spremenljivka, uporabljena v izrazu x = int (raw_input ('Vnesite vrednost x:')) # ovrednotenje izraza y = eval (expr) # tiskanje ocenjenega rezultata print ('y = {}'. format (y)), če __name__ == '__main__': function_creator ()

V zgornjem primeru je function_creator funkcija, ki bo ovrednotila matematične izraze, ki jih je ustvaril uporabnik ob zagonu programa.

spajanje razvrščanja program v javi

Izhod:

Vnesite funkcijo (v smislu x): x * (x + 1) * (x + 2)

Vnesite vrednost x: 3

y = 60

Analiza

Zdaj, ko ste si ogledali zgornjo skupno kodo, jo še malo analizirajmo.

mvc primer uporabe v javi
  1. Zgornja funkcija bo za vhod sprejela katero koli spremenljivko v izrazu x.

  2. Po izvedbi bo uporabnik pozvan, da vnese vrednost za x, šele nato bo rezultat programa ustvarjen.

  3. Končno bo program Python izvedel funkcijo eval z razčlenjevanjemeksprkot argument.

Pomanjkljivosti Evala

Podobno kot druge vgrajene funkcije Pythona ima tudi eval nekaj pomanjkljivosti, ki bi lahko povzročile težave, če jih ne upoštevamo.

Če pogledate zgornji primer, je ena glavnih ranljivosti funkcije function_creator ta, da lahko izpostavi kakršne koli skrite vrednosti v programu in pokliče tudi škodljivo funkcijo, saj bo eval privzeto izvedel vse, kar je v oklepaju.

Za nadaljnje razumevanje si oglejte spodnji primer.

Vnos od uporabnika

Vnesite funkcijo (v smislu x): secret_function ()

Vnesite vrednost x: 0

Izhod:

y = Skrivni ključ je 1234

Druga nevarna situacija, ki pride do uporabe funkcije eval, je uvoz os modula. Ko uvozite os modul, omogoča Pythonu branje in pisanje datotek, ki so prisotne v vašem izvornem sistemu, brez avtentikacije uporabnika. V takem primeru, če napačno vpišete enegavrstice kode, se bodo morda izbrisale vse vaše izvorne datoteke.

Rešitev vseh teh pomanjkljivosti je v omejevanju zmožnosti eval funkcije.

Zaščita Evala v Pythonu

Privzeto ima Eval možnost razčlenitve katere koli funkcije, do katere ima dostop ali katere koli že definirane funkcije. Upoštevanje tega med pisanjem kode bo v veliki meri omejilo zmožnosti evala in s tem zagotovilo, da ne bo šlo nič narobe.

Za nadaljnje razumevanje tega koncepta si oglejte spodnji primer.

from math import * def secret_function (): return 'Secret key is 1234' def function_creator (): # izraz, ki ga je treba ovrednotiti expr = raw_input ('Vnesite funkcijo (v smislu x):') # spremenljivka, uporabljena v izrazu x = int (raw_input ('Vnesite vrednost x:')) # posredovanje spremenljivke x v varnem slovarju safe_dict ['x'] = x # vrednotenje izraza y = eval (izraz, {'__builtins __': None}, safe_dict) # tiskanje ocenjen rezultat tiskanja ('y = {}'. format (y)), če __name__ == '__main__': # seznam varnih metod safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' stopinje ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # ustvarjanje slovarja varnih metod safe_dict = dict ([(k, domačini (). get (k, None)) za k na seznamu safe_list]) function_creator ()

Vnos od uporabnika

kako ustvariti vrsto predmetov v javi

Vnesite funkcijo (v smislu x): secret_function ()

Vnesite vrednost x: 0

Izhod:

NameError: ime 'secret_function' ni določeno

Kot lahko vidite z omejevanjem dostopa eval, so bile možnosti za napačen izhod, ki se lahko izkaže za škodljivega, zanikane.

Uporabe Evala

Kot je razloženo v zgornjih oddelkih, eval zaradi več varnostnih razlogov ni tako pogosto uporabljen. A vseeno obstajajo primeri uporabe, ko se uporaba evala izkaže za koristno. Nekateri najpomembnejši med njimi so.

  1. Če želite, da uporabnik vnese lastne skripte, da spremeni izhodne podatke programa, se vam bo v pomoč uporaba funkcije eval.

  2. Med pisanjem izrazov za reševanje matematičnih poizvedb lahko uporabite eval, saj je to veliko lažje kot pisanje razčlenjevalnika izrazov.

Zdaj, ko veste vse o evalu, upamo, da ga boste uporabili pri vsakodnevnem programiranju, pri tem pa upoštevali prednosti in pomanjkljivosti.

S tem smo prišli do konca tega članka Eval in Python. Če želite pridobiti poglobljeno znanje o Pythonu skupaj z različnimi aplikacijami, lahko za spletno usposabljanje v živo s podporo 24 ur na dan in 7 dni v tednu.

Imate vprašanje za nas? Omenite jih v oddelku za komentarje v 'Eval v Pythonu' in javili se vam bomo.