Vše, co potřebujete vědět o Evalu v Pythonu



Tento článek vám poskytne podrobné a komplexní znalosti o Evalu v Pythonu, jeho nevýhodách a použití s ​​příklady.

Kamkoli se rozhlédnete kolem sebe, najdete aplikaci, která byla speciálně vytvořena tak, aby splňovala vaše potřeby. Ačkoli existuje mnoho programovacích jazyků, které lze použít k vývoji těchto aplikací, většina z nich je vytvořena pomocí . Python spolu se svými skvělými funkcemi a zvýšenou všestranností přináší ke stolu jedinečné nabídky, které jsou vždy silné a mimořádně užitečné. V tomto článku Eval v Pythonu budeme diskutovat o následujících bodech:

Co je Eval v Pythonu?

Funkce eval v Pythonu je jednou z nejzajímavějších možností. Někteří tomu říkají hack a jiní zkratka, ale ať už je to jakkoli, můžete spustit program Python v kódu Pythonu. Docela v pohodě, že?





Když používáte funkci eval, v podstatě naléháte na tlumočníka, aby běžel, který je uzavřen v závorkách funkce eval.

PythonLogo- Eval v PythonuSyntaxe pro použití funkce eval v Pythonu je:



eval (výraz, globální = žádný, místní = žádný)

Ve výše uvedené syntaxi

  1. Výraz: Je to řetězec nebo část kódu, který je analyzován a vyhodnocen jako výraz Pythonu v rámci samotného programu Python.



  2. Globální: Jedná se o slovník, který se používá k definování všech globálních metod, které jsou k dispozici k provedení výše uvedeného výrazu. Toto je volitelná entita a její použití závisí na vaší potřebě.

  3. Místní obyvatelé: Podobně jako u globálů se jedná o další slovník, který se používá k určení dostupných lokálních metod i proměnných.

Chcete-li lépe porozumět použití této funkce, podívejte se na níže uvedený příklad.

from math import * def secret_function (): return 'Secret key is 1234' def function_creator (): # expression to be reviewed expr = raw_input ('Enter the function (terms of x):') # variable used in expression x = int (raw_input ('Zadejte hodnotu x:')) # hodnotící výraz y = eval (expr) # tisk vyhodnoceného výsledku print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

Ve výše uvedeném příkladu je function_creator funkce, která vyhodnotí matematické výrazy vytvořené uživatelem při provádění programu.

Výstup:

Zadejte funkci (z hlediska x): x * (x + 1) * (x + 2)

Zadejte hodnotu x: 3

y = 60

Analýza

Nyní, když jste si prohlíželi výše sdílený kód, pojďme jej analyzovat o něco dále.

  1. Výše uvedená funkce vezme jakoukoli proměnnou ve výrazu x jako svůj vstup.

  2. Po provedení bude uživatel vyzván k zadání hodnoty pro x, teprve poté bude vygenerován výsledek pro program.

  3. Nakonec program Python provede funkci eval analýzouexprjako argument.

Nevýhody Evalu

Podobně jako ostatní integrované funkce Pythonu, eval také přichází s několika nevýhodami, které by mohly způsobit problém, pokud nebudou zohledněny.

Pokud se podíváte na výše uvedený příklad, jednu z hlavních zranitelností funkce, function_creator spočívá v tom, že může odhalit jakékoli skryté hodnoty v programu a také vyvolat škodlivou funkci, protože eval ve výchozím nastavení provede vše, co leží v jeho závorkách.

Chcete-li tomu porozumět dále, podívejte se na níže uvedený příklad.

Vstup od uživatele

Zadejte funkci (z hlediska x): secret_function ()

Zadejte hodnotu x: 0

Výstup:

y = Tajný klíč je 1234

Další nebezpečnou situací, která přichází s použitím funkce eval, je import modulu os. Když jste importovali modul os, umožňuje Pythonu číst a zapisovat všechny soubory přítomné v nativním systému bez ověření od uživatele. V takovém případě, pokud napíšete singlřádek kódu, všechny vaše nativní soubory mohou být smazány.

Řešení všech těchto nevýhod spočívá v omezení schopností funkce eval.

Zajištění bezpečnosti Evalu v Pythonu

Eval ve výchozím nastavení přichází s možností analýzy jakékoli funkce, ke které má přístup, nebo které již byla definována. Mějte to na paměti při psaní kódu a do značné míry omezíte možnosti evalu, čímž zajistíte, že se vám nic nepokazí.

Chcete-li této koncepci porozumět dále, podívejte se na níže uvedený příklad.

cloudera certifikovaný vývojář pro apache hadoop
from math import * def secret_function (): return 'Secret key is 1234' def function_creator (): # expression to be reviewed expr = raw_input ('Enter the function (terms of x):') # variable used in expression x = int (raw_input ('Zadejte hodnotu x:')) # předání proměnné x do bezpečného slovníku safe_dict ['x'] = x # hodnotící výraz y = eval (expr, {'__builtins __': None}, safe_dict) # tisk vyhodnocený výsledek tisku ('y = {}'. format (y)) if __name__ == '__main__': # seznam bezpečných metod safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' stupně ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radiány', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # vytvoření slovníku bezpečných metod safe_dict = dict ([(k, locals (). get (k, None)) pro k v safe_list]) function_creator ()

Vstup od uživatele

Zadejte funkci (z hlediska x): secret_function ()

Zadejte hodnotu x: 0

Výstup:

NameError: název 'secret_function' není definován

Jak vidíte omezením přístupu evalu, šance na chybný výstup, který se může ukázat jako škodlivý, byly vyvráceny.

Použití Evalu

Jak je vysvětleno v předchozích částech, z několika bezpečnostních důvodů se eval tak běžně nepoužívá. Ale přesto existují konkrétní případy použití, kdy se použití eval osvědčilo. Mezi nejvýznamnější z nich patří.

  1. Pokud chcete, aby uživatel zadal své vlastní skripty a upravil tak výstup programu, bude užitečné použít funkci eval.

  2. Při psaní výrazů k řešení matematických dotazů můžete využít eval, protože je to mnohem jednodušší než psaní syntaktického analyzátoru výrazů.

Nyní, když víte vše o evalu, doufáme, že je využijete ve svém každodenním programování, přičemž budete mít na paměti výhody i nevýhody.

S tímto se dostáváme na konec tohoto článku Eval in Python. Chcete-li získat podrobné znalosti o Pythonu a jeho různých aplikacích, můžete pro živé online školení s 24/7 podporou a celoživotním přístupem.

Máte na nás dotaz? Uveďte je v sekci komentářů „Eval v Pythonu“ a my se vám ozveme.