Функция Python eval()
eval()Является встроенной функцией в Python, используемой для выполнения выражений Python в строках.
eval()Принимает строку, выполняет её как код Python и возвращает результат выполнения. Это мощная возможность, но неправильное использование может привести к рискам безопасности.
Определение слова: evalДаevaluateСокращение от (evaluation).
Базовый синтаксис и параметры
Формат синтаксиса
eval(expression, globals, locals)
Описание параметра
- Параметр expression:
- Тип: String
- Описание: Выражение Python, которое нужно выполнить.
- Параметр globals(Необязательно):
- Тип: Словарь
- Описание: Глобальное пространство имён.
- Параметр locals(Необязательно):
- Тип: Словарь
- Описание: Локальное пространство имён.
Описание функций
- Возвращаемое значение: Возвращает результат выполнения выражения.
- Предупреждение о безопасности: Не используйте на недоверенных входных данных
eval(), так как это может привести к атакам с внедрением кода.
Примеры
Пример 1: Базовое использование
Пример
# Вычислить математическое выражение
result = eval("1 + 2 + 3")
print(result) # Вывод: 6
# Использование переменных
x = 10
result = eval("x * 2")
print(result) # Вывод: 20
# Сложное выражение
result = eval("2 ** 3 + 4 * 5")
print(result) # Вывод: 28
# Вызов функции
result = eval("len('hello')")
print(result) # Вывод: 5
result = eval("1 + 2 + 3")
print(result) # Вывод: 6
# Использование переменных
x = 10
result = eval("x * 2")
print(result) # Вывод: 20
# Сложное выражение
result = eval("2 ** 3 + 4 * 5")
print(result) # Вывод: 28
# Вызов функции
result = eval("len('hello')")
print(result) # Вывод: 5
Ожидаемый вывод:
6 20 28 5
Пояснение к коду:
eval()Может выполнять арифметические выражения.- Может ссылаться на определённые переменные.
- Может вызывать встроенные функции.
Пример 2: Ограниченная среда
Пример
# Ограничить доступные функции и переменные
x = 10
y = 20
# Создать ограниченный глобальный словарь
safe_dict = {"x": x, "y": y, "abs": abs}
result = eval("x + y", safe_dict)
print(result) # Вывод: 30
# Запретить доступ к опасным функциям
try:
eval("__import__('os').system('ls')", {})
except NameError as e:
print(f"Ограничение безопасности: {e}")
x = 10
y = 20
# Создать ограниченный глобальный словарь
safe_dict = {"x": x, "y": y, "abs": abs}
result = eval("x + y", safe_dict)
print(result) # Вывод: 30
# Запретить доступ к опасным функциям
try:
eval("__import__('os').system('ls')", {})
except NameError as e:
print(f"Ограничение безопасности: {e}")
Ожидаемый вывод:
30 安全限制: name '__import__' is not defined
Этот пример демонстрирует, как улучшитьeval()безопасность путем ограничения словаря globals.
Другие расширения
Встроенные функции Python3