Функция Python eval()

Python3 内置函数Встроенные функции Python3


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

Ожидаемый вывод:

6
20
28
5

Пояснение к коду:

  1. eval()Может выполнять арифметические выражения.
  2. Может ссылаться на определённые переменные.
  3. Может вызывать встроенные функции.

Пример 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}")

Ожидаемый вывод:

30
安全限制: name '__import__' is not defined

Этот пример демонстрирует, как улучшитьeval()безопасность путем ограничения словаря globals.


Python3 内置函数Встроенные функции Python3


Другие расширения