Всичко, което трябва да знаете за Eval в Python



Тази статия ще ви предостави подробни и изчерпателни познания за Eval в Python, Това са недостатъци и приложения с примери.

Навсякъде, където се огледате около себе си, ще намерите приложение, което е специално създадено, за да отговори на вашите нужди. Въпреки че има много езици за програмиране, които могат да се използват за разработване на тези приложения, повечето от тях са изградени с помощта на . Python, заедно със своите страхотни функции и повишена гъвкавост, предлага на масата уникални предложения, които са едновременно мощни и изключително полезни по всяко време. В тази статия за Eval в Python ще обсъдим следните точки:

Какво е Eval в Python?

Функцията eval в Python е една от най-интересните опции там. Някои го наричат ​​хак, а други го наричат ​​пряк път, но така или иначе можете да го използвате, за да стартирате програма на Python в рамките на код на Python. Доста готино нали?





Когато използвате функцията eval, по същество подканвате интерпретатора да изпълни, затворен в скобата на функцията eval.

PythonLogo - Eval в PythonСинтаксисът за използване на функцията eval в Python е:



eval (израз, глобални = няма, местни = няма)

В горния синтаксис,

  1. Израз: Това е низът или парчето код, което се анализира и оценява като израз на Python в самата програма на Python.



  2. Глобално: Това е речникът, който се използва за дефиниране на всички налични глобални методи за изпълнение на гореспоменатия израз. Това е незадължителен обект и неговите приложения зависят от вашите нужди.

  3. Местни жители: Подобно на глобалните, това е друг речник, който се използва за определяне на наличните локални методи, както и променливи.

За да разберете по-добре използването на тази функция, разгледайте примера по-долу.

от математически импорт * def secret_function (): return 'Secret key is 1234' def function_creator (): # израз, който трябва да бъде оценен expr = raw_input ('Въведете функцията (по отношение на x):') # променлива, използвана в израз x = int (raw_input ('Въведете стойността на x:')) # оценяващ израз y = eval (expr) # отпечатване на оценен резултат print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

В горния пример function_creator е функция, която ще оцени математическите изрази, създадени от потребителя, когато програмата се изпълни.

Изход:

Въведете функцията (по x): x * (x + 1) * (x + 2)

Въведете стойността на x: 3

у = 60

Анализ

След като разгледахте споделения по-горе код, нека го анализираме още малко.

  1. Горната функция ще вземе всяка променлива в израза x като свой вход.

  2. След като бъде изпълнен, потребителят ще бъде подканен да въведе стойност за x, само след което ще се генерира резултатът за програмата.

  3. И накрая, програмата Python ще изпълни функцията eval чрез анализиране наизразкато аргумент.

Недостатъци на Eval

Подобно на други вградени функции на Python, eval също има няколко недостатъка, които могат да създадат проблем, ако не бъдат отчетени.

Ако разгледате горния пример, една от основните уязвимости на функцията, function_creator е, че тя може да изложи всякакви скрити стойности в рамките на програмата и също така да извика вредна функция, тъй като eval по подразбиране ще изпълни всичко, което се намира в нейната скоба.

За да разберете това по-нататък, разгледайте примера по-долу.

Вход от потребителя

Въведете функцията (по x): secret_function ()

Въведете стойността на x: 0

Изход:

y = Тайният ключ е 1234

Друга опасна ситуация, която идва с използването на функцията eval, е импортирането на модул os. Когато сте импортирали os модула, той позволява на Python да чете и записва всички файлове, присъстващи на вашата родна система, без удостоверяване от потребителя. В такъв случай, ако погрешно въведете единицаред код, всичките ви родни файлове може да се изтрият.

Решението на всички тези недостатъци се крие в ограничаването на възможностите на функцията eval.

Направете Eval безопасен в Python

По подразбиране Eval се предлага с опцията за синтактичен анализ на която и да е функция, до която има достъп или която вече е дефинирана. Имайки това предвид, докато пишете кода си, ще ограничите значително възможностите на eval, като по този начин ще се уверите, че нищо не се обърка.

сортиране на масиви c ++

За да разберете по-нататък тази концепция, разгледайте примера по-долу.

от математически импорт * def secret_function (): return 'Secret key is 1234' def function_creator (): # израз, който трябва да бъде оценен expr = raw_input ('Въведете функцията (по отношение на x):') # променлива, използвана в израз x = int (raw_input ('Въведете стойността на x:')) # предаване на променлива x в безопасен речник safe_dict ['x'] = x # оценяване на израз y = eval (израз, {'__builtins __': Няма}, safe_dict) # печат оценен резултат за печат ('y = {}'. формат (y)), ако __name__ == '__main__': # списък с безопасни методи safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' градуси ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # създаване на речник на безопасни методи safe_dict = dict ([(k, местни (). get (k, Няма)) за k в безопасен списък]) function_creator ()

Вход от потребителя

Въведете функцията (по x): secret_function ()

Въведете стойността на x: 0

Изход:

NameError: името 'secret_function' не е дефинирано

Както можете да видите, като ограничите достъпа на eval, шансовете за грешен изход, който може да се окаже вреден, са отхвърлени.

Използване на Eval

Както е обяснено в горните раздели, поради няколко причини за сигурност eval не се използва толкова често. Но все пак има конкретни случаи на използване, когато използването на eval се оказва полезно. Някои от най-значимите от тях са.

  1. Ако искате потребителят да въведе свои собствени скриплети, за да модифицира изхода на програмата, тогава използването на функцията eval ще се окаже полезно.

  2. Докато пишете изрази за решаване на математически заявки, можете да използвате eval, тъй като е много по-лесно от писането на парсер на изрази.

След като вече знаете всичко за eval, надяваме се, че ще използвате същото в ежедневното си програмиране, като същевременно имате предвид предимствата, както и недостатъците.

С това стигнахме до края на тази статия за Eval in Python. За да получите задълбочени познания за Python заедно с различните му приложения, можете за онлайн обучение на живо с 24/7 поддръжка и доживотен достъп.

Имате въпрос към нас? Споменете ги в раздела за коментари на „Eval в Python“ и ние ще се свържем с вас.