Все, что вам нужно знать об Eval на Python



Эта статья предоставит вам подробные и всесторонние знания об Eval в Python, его недостатках и использовании с примерами.

Куда бы вы ни посмотрели, вы найдете приложение, специально созданное для удовлетворения ваших потребностей. Хотя существует множество языков программирования, которые можно использовать для разработки этих приложений, большинство из них построено с использованием . Python, наряду с его великолепными функциями и повышенной универсальностью, предлагает уникальные предложения, одновременно мощные и чрезвычайно полезные в любое время. В этой статье Eval in Python мы обсудим следующие моменты:

Что такое Eval в Python?

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





Когда вы используете функцию eval, вы в основном призываете запустить интерпретатор, заключенный в скобки функции eval.

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



eval (выражение, globals = None, locals = None)

В приведенном выше синтаксисе

что такое хадуп больших данных
  1. Выражение: Это строка или фрагмент кода, который анализируется и оценивается как выражение Python в самой программе Python.



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

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

Чтобы лучше понять использование этой функции, взгляните на приведенный ниже пример.

from math import * def secret_function (): return 'Секретный ключ равен 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, проанализировавexprкак аргумент.

Недостатки Eval

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

глубокое обучение против машинного обучения против распознавания образов

Если вы посмотрите на приведенный выше пример, одна из основных уязвимостей функции function_creator заключается в том, что она может открывать любые скрытые значения в программе, а также вызывать вредоносную функцию, поскольку eval по умолчанию выполнит все, что находится в скобках.

Чтобы лучше понять это, взгляните на пример ниже.

Ввод от пользователя

Введите функцию (в терминах x): secret_function ()

Введите значение x: 0

Вывод:

y = Секретный ключ 1234

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

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

Как сделать Eval Safe в Python

Eval по умолчанию имеет возможность анализировать любую функцию, к которой у нее есть доступ, или любую, которая уже была определена. Помните об этом при написании кода, это в значительной степени ограничит возможности eval, таким образом вы убедитесь, что все идет не так, как надо.

Чтобы лучше понять эту концепцию, взгляните на приведенный ниже пример.

from math import * def secret_function (): return 'Секретный ключ равен 1234' def function_creator (): # выражение для оценки expr = raw_input ('Введите функцию (в терминах x):') # переменную, используемую в выражении x = int (raw_input ('Введите значение x:')) # передача переменной x в безопасный словарь safe_dict ['x'] = x # оценка выражения y = eval (expr, {'__builtins __': None}, safe_dict) # печать вычисленный результат print ('y = {}'. format (y)) if __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, locals (). get (k, None)) для k в safe_list]) function_creator ()

Ввод от пользователя

Введите функцию (в терминах x): secret_function ()

Введите значение x: 0

Вывод:

NameError: имя 'secret_function' не определено

Как вы можете видеть, ограничив доступ eval, вероятность неправильного вывода, который может оказаться вредным, сведена на нет.

Использование Eval

Как объяснялось в предыдущих разделах, по нескольким причинам безопасности eval не так широко используется. Но все же есть частные случаи, когда использование eval оказывается полезным. Некоторые из наиболее значимых из них.

  1. Если вы хотите, чтобы пользователь вводил свои собственные скриптлеты для изменения вывода программы, то использование функции eval окажется полезным.

  2. При написании выражений для решения математических запросов вы можете использовать eval, поскольку это намного проще, чем писать синтаксический анализатор выражений.

Теперь, когда вы знаете все о eval, мы надеемся, что вы будете использовать его в повседневном программировании, не забывая при этом как о преимуществах, так и о недостатках.

разница между классом и интерфейсом в java

На этом мы подошли к концу статьи Eval in Python. Чтобы получить более глубокие знания о Python и его различных приложениях, вы можете для онлайн-обучения с круглосуточной поддержкой и пожизненным доступом.

Есть вопрос к нам? Упомяните их в разделе комментариев «Eval in Python», и мы свяжемся с вами.