Wszystko, co musisz wiedzieć o Eval w Pythonie



W tym artykule znajdziesz szczegółową i wszechstronną wiedzę na temat Eval w Pythonie, jego wady i zastosowania wraz z przykładami.

Wszędzie, gdzie się rozejrzysz, znajdziesz aplikację, która została specjalnie zbudowana, aby spełnić Twoje potrzeby. Chociaż istnieje wiele języków programowania, których można użyć do tworzenia tych aplikacji, większość z nich jest tworzona przy użyciu . Python wraz z jego wspaniałymi funkcjami i zwiększoną wszechstronnością wprowadza do stołu unikalne oferty, które są zarówno potężne, jak i niezwykle przydatne przez cały czas. W tym artykule Eval in Python omówimy następujące kwestie:

Co to jest Eval w Pythonie?

Funkcja eval w Pythonie jest jedną z najciekawszych dostępnych opcji. Niektórzy nazywają to hack, a niektórzy nazywają to skrótem, ale tak czy inaczej możesz z niego skorzystać, aby uruchomić program w Pythonie w kodzie Pythona. Całkiem fajnie, prawda?





Korzystając z funkcji eval, w zasadzie zachęcasz interpretera do uruchomienia, który jest zamknięty w nawiasie funkcji eval.

PythonLogo- Eval w PythonieSkładnia użycia funkcji eval w Pythonie to:



eval (wyrażenie, globals = None, locals = None)

W powyższej składni

  1. Wyrażenie: Jest to ciąg lub fragment kodu, który jest analizowany i oceniany jako wyrażenie Pythona w samym programie w języku Python.



  2. Światowy: To słownik służy do definiowania wszystkich dostępnych metod globalnych do wykonania powyższego wyrażenia. Jest to jednostka opcjonalna, a jej zastosowania zależą od Twoich potrzeb.

  3. Miejscowi: Podobnie jak w przypadku zmiennych globalnych jest to kolejny słownik używany do określania dostępnych metod lokalnych oraz zmiennych.

Aby lepiej zrozumieć użycie tej funkcji, spójrz na poniższy przykład.

from math import * def secret_function (): return 'Tajny klucz to 1234' def function_creator (): # wyrażenie do oceny expr = raw_input ('Wprowadź funkcję (w postaci x):') # zmienna użyta w wyrażeniu x = int (raw_input ('Wprowadź wartość x:')) # obliczające wyrażenie y = eval (wyrażenie) # wypisywanie oszacowanego wyniku print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

W powyższym przykładzie function_creator to funkcja, która oceni wyrażenia matematyczne utworzone przez użytkownika podczas wykonywania programu.

Wynik:

Podaj funkcję (wyrażoną x): x * (x + 1) * (x + 2)

Wpisz wartość x: 3

y = 60

Analiza

Teraz, gdy obejrzałeś udostępniony powyżej kod, przeanalizujmy go nieco dokładniej.

  1. Powyższa funkcja przyjmie dowolną zmienną z wyrażenia x jako dane wejściowe.

  2. Po wykonaniu, użytkownik zostanie poproszony o wpisanie wartości x, dopiero po czym zostanie wygenerowany program.

  3. Na koniec program w Pythonie wykona funkcję eval, analizując plikwyrjako argument.

Wady Eval

Podobnie jak inne wbudowane funkcje Pythona, eval również ma kilka wad, które mogą powodować problem, jeśli nie zostaną uwzględnione.

Jeśli spojrzysz na powyższy przykład, jedną z głównych luk w zabezpieczeniach funkcji, function_creator, jest to, że może ona ujawnić wszelkie ukryte wartości w programie, a także wywołać szkodliwą funkcję, ponieważ eval domyślnie wykona wszystko, co znajduje się w nawiasach.

Aby lepiej to zrozumieć, spójrz na poniższy przykład.

Dane wejściowe od użytkownika

Wpisz funkcję (wyrażoną x): secret_function ()

Wpisz wartość x: 0

Wynik:

y = Tajny klucz to 1234

Inną niebezpieczną sytuacją związaną z używaniem funkcji eval jest import modułu systemu operacyjnego. Po zaimportowaniu modułu os umożliwia Pythonowi odczytywanie i zapisywanie dowolnych plików obecnych w systemie natywnym bez uwierzytelniania użytkownika. W takim przypadku, jeśli błędnie wpiszesz pojedynczy pliklinii kodu, wszystkie natywne pliki mogą zostać usunięte.

Rozwiązanie wszystkich tych wad polega na ograniczeniu możliwości funkcji eval.

Bezpieczeństwo Eval w Pythonie

Eval domyślnie zawiera opcję parsowania dowolnej funkcji, do której ma dostęp lub dowolnej, która została już zdefiniowana. Pamiętanie o tym podczas pisania kodu ograniczy w znacznym stopniu możliwości eval, upewniając się, że nic nie pójdzie nie tak.

Aby lepiej zrozumieć tę koncepcję, spójrz na poniższy przykład.

from math import * def secret_function (): return 'Tajny klucz to 1234' def function_creator (): # wyrażenie do oceny expr = raw_input ('Wprowadź funkcję (w postaci x):') # zmienna użyta w wyrażeniu x = int (raw_input ('Enter the value of x:')) # przekazanie zmiennej x w bezpiecznym słowniku safe_dict ['x'] = x # wyrażenie oceny y = eval (expr, {'__builtins __': None}, safe_dict) # printing oceniono wynik print ('y = {}'. format (y)) if __name__ == '__main__': # lista bezpiecznych metod safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil „,„ cos ”,„ cosh ”,„ stopnie ”,„ e ”,„ exp ”,„ fabs ”,„ floor ”,„ fmod ”,„ frexp ”,„ hypot ”,„ ldexp ”,„ log ”, 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # tworzenie słownika bezpiecznych metod safe_dict = dict ([(k, locals (). get (k, None)) for k in safe_list]) function_creator ()

Dane wejściowe od użytkownika

Wpisz funkcję (wyrażoną x): secret_function ()

Wpisz wartość x: 0

skaner java pobiera następny znak

Wynik:

NameError: nazwa „tajna_funkcja” nie jest zdefiniowana

Jak widać, ograniczając dostęp do eval, szanse na błędne wyjście, które może okazać się szkodliwe, zostały zanegowane.

Zastosowania Eval

Jak wyjaśniono w powyższych sekcjach, z kilku powodów bezpieczeństwa eval nie jest tak powszechnie stosowany. Ale nadal istnieją szczególne przypadki użycia, w których użycie eval okazuje się pomocne. Niektóre z najważniejszych z nich to.

  1. Jeśli chcesz, aby użytkownik wprowadził własne skryptlety, aby zmodyfikować wyjście programu, wtedy użycie funkcji eval okaże się pomocne.

  2. Pisząc wyrażenia w celu rozwiązywania zapytań matematycznych, możesz skorzystać z eval, ponieważ jest to znacznie łatwiejsze niż pisanie parsera wyrażeń.

Teraz, gdy wiesz już wszystko o eval, mamy nadzieję, że wykorzystasz to samo w swoim codziennym programowaniu, pamiętając zarówno o zaletach, jak i wadach.

W ten sposób dochodzimy do końca tego artykułu Eval in Python. Aby uzyskać dogłębną wiedzę na temat języka Python i jego różnych aplikacji, możesz do szkoleń online na żywo z całodobowym wsparciem i dożywotnim dostępem

Masz do nas pytanie? Wspomnij o nich w sekcji komentarzy w „Eval in Python”, a my skontaktujemy się z Tobą.