Рубрики
Без рубрики

Понимание метода Python Exec ()

Поэтому сегодня в этом руководстве давайте узнаем о методе Python Exec () в Python.

Автор оригинала: Pankaj Kumar.

Понимание метода Python Exec ()

Итак, сегодня в этом руководстве, давайте узнаем о Метод Python Exec () в Python Отказ

Метод Python Exec ()

В основном, Python EXEC () Способ выполняет пропущенный набор кода в виде строки. Это очень полезно, так как практически поддерживает динамическое выполнение. Синтаксис для метода приведен ниже.

exec(object, globals, locals)

Здесь объект Может быть строка, открытый файл объект или объект кода.

  • Для строки – Строка анализируется как набор операторов Python, который затем выполняется (если не возникает ошибка синтаксиса).
  • Для открытого файла – Файл анализируется до EOF и выполняется.
  • Для кода объекта – Это просто выполняется.

И два дополнительных аргумента глобал и Местные жители должно быть Словари используется для глобальных и локальных переменных.

Теперь, когда у нас уже есть основная идея EXEC () Метод, давайте попробуем понять, что это работает через пример.

>>> exec("print('Hey!')")
Hey!
>>> exec("print(6+4)")
10

Понятно из вышеуказанного фрагмента кода, Печать () Заявления успешно выполнены EXEC () метод, и мы получаем желаемые результаты.

Работа с методом Python Exec ()

Теперь давайте прыгаем прямо в некоторые примеры, исследующие, как EXEC () Метод работает в Python с и без глобал и Местные жители Параметры.

1. Без глобальных и локальных параметров

В предыдущем примере мы просто выполняли какой-то набор инструкций в Python, передавая аргумент объекта для EXEC () метод. Но мы не видели имена в текущем объеме.

Теперь будем использовать dir () Способ получения списка текущих методов и имен с Математика Модуль включен перед вызовом EXEC () метод.

from math import *

exec("print(pow(2, 5))")

exec("print(dir())")

Выход:

32.0
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

Как видите, различные методы, включая Встроенные , а также из Математика Модуль прямо сейчас в текущем объеме и доступен для Python EXEC () метод.

Это поднимает большую проблему безопасности, думая о выполнении Динамический код Python Отказ Пользователь может включать в себя некоторые модули для доступа к командам системы, которые даже могут сбояться с компьютером. Используя глобал и Местные жители Параметры, которые мы можем буквально ограничить EXEC () Выйти за пределы методов, которые мы хотим получить доступ.

2. С параметром глобалей

Теперь давайте посмотрим, как мы можем использовать Python EXEC () Метод с глобал параметр. Python позволяет нам пройти и указывать только методы, которые мы хотим EXEC () Способ доступа (в виде словаря) из Встроенный модуль.

def squareNo(a):
    return a*a

exec('print(squareit(10))',{"__builtins__":{"squareit": squareNo, "print": print}})

exec("print(dir())")

Выход:

100
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'squareNo']

В указанном выше коде мы прошли словарь, содержащий методы Squareno () (Сопоставлено на пользовательское имя Square ) и Печать () Отказ Примечание, используя любой другой метод из Встроенный Метод поднимет Типеррор Отказ

3. С параметром Locals

Когда мы пройдем только Местный Параметр ( Словарь ) по умолчанию все Встроенный Методы также доступны до тех пор, пока мы не исключаем их явно не исключаем.

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

from math import *
def squareNo(a):
    return a*a

#global And local parameters
exec('print(pow(4,3))', {"squareit": squareNo, "print": print})

exec("print(dir())")

Выход:

64
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'squareNo', 'tan', 'tanh', 'tau', 'trunc']

Следовательно, теперь явно исключая Встроенные Отказ

from math import *

def squareNo(a):
    return a*a

#explicitly excluding built-ins
exec('print(pow(4,3))', {"__builtins__": None},{"squareit": squareNo, "print": print})

exec("print(dir())")

Выход:

Traceback (most recent call last):
  File "C:/Users/sneha/Desktop/test.py", line 7, in 
    exec('print(pow(4,3))', {"__builtins__": None},{"squareit": squareNo, "print": print})
  File "", line 1, in 
TypeError: 'NoneType' object is not subscriptable

В коде выше, ограничивая EXEC () Способ использования только прохожденных ( local ) методы практически делает POW () метод недоступный. Следовательно, во время бега мы получаем Типеррор Отказ

exec () vs eval () в python

Существует два основных различия между Eval () и EXEC () Методы, даже если почти не выполняют ту же работу.

  1. Eval () может выполнить только одно выражение, тогда как EXEC () Может использоваться для выполнения динамически созданного оператора или программы, которая может включать петли, Если-ж Заявления, функция и Класс Определения,
  2. Eval () Возвращает значение после выполнения определенного выражения, тогда как EXEC () в основном ничего не возвращается и просто игнорирует значение.

Заключение

Так что это за сегодня. Надеюсь, у вас было четкое понимание работоспособности, используя Python EXEC () метод.

Для любого дальнейшего питона EXEC () Связанные вопросы, не стесняйтесь спрашивать в комментариях ниже.

использованная литература