X Tutup
Skip to content

Latest commit

 

History

History
146 lines (113 loc) · 5.7 KB

File metadata and controls

146 lines (113 loc) · 5.7 KB
title Встроенная функция Python exec() - Шпаргалка по Python
description Эта функция поддерживает динамическое выполнение кода Python. Объект должен быть строкой или кодовым объектом. Если это строка, она анализируется как набор операторов Python, которые затем выполняются (если не возникает синтаксической ошибки) [...].
Встроенная функция Python exec() Из документации Python 3 Эта функция поддерживает динамическое выполнение кода Python. object должен быть либо строкой, либо объектным кодом. Если это строка, строка анализируется как набор операторов Python, который затем выполняется (если не возникает синтаксической ошибки) [...].

Введение

Функция exec() в Python — это встроенная функция, которая позволяет динамически выполнять код Python, хранящийся в строке. Это может быть очень полезно в сценариях, когда вы хотите выполнить код, предоставленный пользователями, сгенерировать и запустить код во время выполнения, или даже создать мини-интерпретаторы или среды сценариев внутри вашего приложения. Однако ее следует использовать с осторожностью, поскольку при неправильной обработке она может представлять угрозу безопасности.

Синтаксис

exec(object[, globals[, locals]])
  • object: Строка, содержащая код Python для выполнения.
  • globals (необязательно): Словарь, представляющий глобальное пространство имен. Если не предоставлено, используется текущее глобальное пространство имен.
  • locals (необязательно): Словарь, представляющий локальное пространство имен. Если не предоставлено, используется текущее локальное пространство имен.

Базовое использование

code_to_execute = "print('Hello, exec()!')"
exec(code_to_execute)
Hello, exec()!

Функция exec() также может использоваться с функцией print() для отображения вывода в консоли.

Выполнение нескольких операторов

code = """
for i in range(5):
    print(i)
"""
exec(code)
0
1
2
3
4

В этом примере функция exec() используется для выполнения цикла for, который перебирает диапазон чисел и выводит каждое число в консоль.

Изменение переменных

x = 10
code = "x += 5"
exec(code)
print(x)
15

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

x = 5
code = "x = x * 2"
globals_dict = {"x": 10}
locals_dict = {"x": 20}
exec(code, globals_dict, locals_dict)
print(x)
print(globals_dict)
print(locals_dict)
5
{'x': 10}
{'x': 40}

Динамическое создание функций

def create_dynamic_function(name, args):
    code = f"def {name}({', '.join(args)}): return sum({args})"
    exec(code)

create_dynamic_function("add_numbers", ["a", "b", "c"])
result = add_numbers(2, 3, 5)
print(result)
10

В этом примере функция exec() используется для создания динамической функции, которая принимает список аргументов и возвращает их сумму.

Обработка ошибок

code = """
try:
    print(undefined_variable)
except NameError as e:
    print(f"Error: {e}")
"""
exec(code)
Error: name 'undefined_variable' is not defined

Примечание по безопасности

user_input = input("Enter code to execute: ")
exec(user_input)  # Caution: This can be a security risk if not properly sanitized.

Связанные ссылки

  • compile()
  • eval()
  • globals()
  • locals()
  • Обработка исключений
  • Отладка
X Tutup