Všetko, čo potrebujete vedieť o Eval v Pythone



Tento článok vám poskytne podrobné a komplexné znalosti jazyka Eval v jazyku Python, jeho nevýhod a použití s ​​príkladmi.

Kamkoľvek sa rozhliadnete okolo seba, nájdete aplikáciu, ktorá bola vyvinutá špeciálne pre vaše potreby. Aj keď existuje veľa programovacích jazykov, ktoré možno použiť na vývoj týchto aplikácií, väčšina z nich je zostavená pomocou . Python spolu so svojimi skvelými vlastnosťami a zvýšenou všestrannosťou prináša k stolu jedinečné ponuky, ktoré sú vždy silné a mimoriadne užitočné. V tomto článku Eval v Pythone budeme diskutovať o nasledujúcich bodoch:

Čo je Eval v Pythone?

Funkcia eval v Pythone je jednou z najzaujímavejších možností. Niekto to nazýva hack a niekto skratka, ale v každom prípade to môžete využiť na spustenie programu Python v kóde Python. Celkom v pohode, že?





Keď používate funkciu eval, v podstate naliehate na tlmočníka, aby bežal, ktorý je uvedený v zátvorke funkcie eval.

PythonLogo- Eval v PythoneSyntax pre použitie funkcie eval v Pythone je:



eval (výraz, globály = žiadne, miestne = žiadne)

Vo vyššie uvedenej syntaxi

  1. Výraz: Je to reťazec alebo časť kódu, ktorá sa analyzuje a vyhodnotí ako výraz v jazyku Python v rámci samotného programu Python.



  2. Globálne: Je to slovník, ktorý sa používa na definovanie všetkých globálnych metód dostupných na vykonanie výrazu uvedeného vyššie. Toto je voliteľná entita a jej použitie závisí od vašej potreby.

  3. Miestni obyvatelia: Podobne ako globály, aj toto je ďalší slovník, ktorý sa používa na špecifikáciu dostupných miestnych metód a premenných.

Ak chcete lepšie porozumieť použitiu tejto funkcie, pozrite si príklad uvedený nižšie.

z matematického importu * def secret_function (): return 'Secret key is 1234' def function_creator (): # výraz, ktorý sa má vyhodnotiť expr = raw_input ('Zadajte funkciu (z hľadiska x):') # premenná použitá vo výraze x = int (raw_input ('Zadajte hodnotu x:')) # hodnotiaci výraz y = eval (expr) # tlač vyhodnotený výsledok print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

Vo vyššie uvedenom príklade je function_creator funkcia, ktorá bude vyhodnocovať matematické výrazy vytvorené používateľom pri vykonávaní programu.

Výkon:

Zadajte funkciu (z hľadiska x): x * (x + 1) * (x + 2)

Zadajte hodnotu x: 3

y = 60

Analýza

Teraz, keď ste si zobrazili vyššie zdieľaný kód, poďme ho analyzovať o niečo ďalej.

  1. Vyššie uvedená funkcia vezme ako vstup ľubovoľnú premennú vo výraze x.

  2. Po vykonaní bude užívateľ vyzvaný na zadanie hodnoty pre x, až potom bude vygenerovaný výsledok pre program.

  3. Nakoniec program Python vykoná funkciu eval analýzouexprako argument.

Nevýhody Evalu

Podobne ako iné vstavané funkcie Pythonu, aj eval má niekoľko nevýhod, ktoré by mohli spôsobiť problém, ak nebudú zohľadnené.

Ak sa pozriete na vyššie uvedený príklad, jednu z hlavných zraniteľností funkcie, function_creator spočíva v tom, že môže odhaliť všetky skryté hodnoty v rámci programu a tiež vyvolať škodlivú funkciu, pretože eval štandardne vykoná všetko, čo leží v jej zátvorkách.

Aby ste tomu lepšie porozumeli, pozrite si príklad uvedený nižšie.

Vstup od používateľa

Zadajte funkciu (z hľadiska x): secret_function ()

Zadajte hodnotu x: 0

Výkon:

y = Tajný kľúč je 1234

Ďalšou nebezpečnou situáciou, ktorá prichádza s použitím funkcie eval, je import modulu os. Po importovaní modulu os umožňuje Pythonu čítať a zapisovať všetky súbory nachádzajúce sa vo vašom natívnom systéme bez overenia používateľom. V takom prípade, ak napíšete singel nesprávneriadku kódu, môžu sa vymazať všetky vaše natívne súbory.

Riešenie všetkých týchto nevýhod spočíva v obmedzení možností evalnej funkcie.

Zvyšovanie bezpečnosti v systéme Python

Eval je predvolene dodávaný s možnosťou analýzy akejkoľvek funkcie, ku ktorej má prístup, alebo ku ktorej už bola definovaná. Toto budete mať na pamäti pri písaní kódu, čím do značnej miery obmedzíte možnosti evalu, čím zaistíte, že sa vám nič nepokazí.

Ak chcete tejto koncepcii porozumieť ďalej, pozrite si príklad uvedený nižšie.

skener Java získať ďalšie char
z matematického importu * def secret_function (): return 'Secret key is 1234' def function_creator (): # výraz, ktorý sa má vyhodnotiť expr = raw_input ('Zadajte funkciu (z hľadiska x):') # premenná použitá vo výraze x = int (raw_input ('Zadajte hodnotu x:')) # odovzdanie premennej x do bezpečného slovníka safe_dict ['x'] = x # hodnotiaci výraz y = eval (expr, {'__builtins __': None}, safe_dict) # tlač vyhodnotený výsledok print ('y = {}'. format (y)) if __name__ == '__main__': # zoznam bezpečných metód safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' stupne ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radiány', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # vytvorenie slovníka bezpečných metód safe_dict = dict ([(k, locals (). get (k, None)) pre k v zozname safe_list]) function_creator ()

Vstup od používateľa

Zadajte funkciu (z hľadiska x): secret_function ()

Zadajte hodnotu x: 0

Výkon:

NameError: názov „secret_function“ nie je definovaný

Ako vidíte, obmedzením prístupu evalu boli vylúčené šance na nesprávny výstup, ktorý sa môže ukázať ako škodlivý.

Použitie Evalu

Ako je vysvetlené v predchádzajúcich častiach, z niekoľkých bezpečnostných dôvodov sa eval tak často nepoužíva. Stále však existujú konkrétne prípady použitia, pri ktorých sa použitie eval osvedčí. Niektoré z najvýznamnejších z nich sú.

  1. Ak chcete, aby užívateľ zadal svoje vlastné skripty na úpravu výstupu programu, potom sa vám osvedčí použitie funkcie eval.

  2. Pri písaní výrazov na riešenie matematických otázok môžete využiť eval, pretože je to oveľa jednoduchšie ako písať syntaktický analyzátor výrazov.

Teraz, keď viete všetko o eval, dúfame, že ich využijete vo svojom každodennom programovaní, pričom nezabudnite na výhody i nevýhody.

Týmto sa dostávame na koniec tohto článku Eval in Python. Ak chcete získať podrobné informácie o Pythone a jeho rôznych aplikáciách, môžete pre živé online školenie s nepretržitou podporou a doživotným prístupom.

Máte na nás otázku? Uveďte ich v sekcii komentárov „Eval in Python“ a my sa vám ozveme.