Функция exec( ) в Python

Обложка к статье "Функция exec( ) в Python"

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

Синтаксис

exec(object, globals=None, locals=None)

Параметры

  • object: Обязательный параметр. Строка или объект кода, содержащий команды и инструкции на языке Python, которые нужно выполнить.
  • globals: Необязательный параметр. Словарь, определяющий глобальное пространство имен.
  • locals: Необязательный параметр. Словарь или любой отображаемый объект, определяющий локальное пространство имен.

Возвращаемое значение

Функция exec не возвращает значения. Она выполняет переданный ей код.

Примеры использования

Пример 1: Выполнение строки кода

exec('print("Hello, World!")')

Вывод:

Hello, World!

Пример 2: Определение функции динамически

code = """
def greet(name):
    print(f"Hello, {name}!")
"""

exec(code)
greet("Alice")

Вывод:

Hello, Alice!

Пример 3: Использование глобального и локального пространства имен

globals_dict = {'x': 5}
locals_dict = {'y': 10}
code = 'z = x + y'
exec(code, globals_dict, locals_dict)
print(locals_dict['z'])  # Вывод: 15

Примеры практического применения

Пример 4: Выполнение кода из файла

with open('script.py', 'r') as file:
    code = file.read()
    exec(code)

Пример 5: Генерация и выполнение кода на лету

for i in range(5):
    exec(f'print("This is iteration {i}")')

Вывод:

This is iteration 0
This is iteration 1
This is iteration 2
This is iteration 3
This is iteration 4

Важные замечания

Безопасность: Использование exec с недоверенными данными может быть крайне опасным, так как это позволяет выполнение произвольного кода. Это может привести к серьезным проблемам безопасности.

НЕ ВЫПОЛНЯЙТЕ КОД ПРЕДСТАВЛЕННЫЙ НИЖЕ

# Никогда не используйте exec с недоверенными данными
user_input = "__import__('os').system('rm -rf /')"
exec(user_input)  # Это может удалить все файлы на вашей системе

Оптимизация: Код, выполняемый с помощью exec, обычно выполняется медленнее, чем статический код, так как он не может быть оптимизирован компилятором.

Оцените статью
( Пока оценок нет )
Обучение Python
Добавить комментарий