, где expression вводится пользователем ('sin(x)', 'x+20*x**2' и т.д.).
Но здесь имеется проблема в связи с тем, что eval обрабатывает любое python-выражение.
Есть ли какая альтернатива (может в numpy есть подходящая функция), чтобы самому не создавать велосипед с проверкой содержимого вычисляемого выражения)?
Включаю телепатию: ему нужны математические выражения, и при этом нужно, чтобы выражение для вычисления было безопасно брать из недоверенного источника.
нужно, чтобы выражение для вычисления было безопасно брать из недоверенного источника.
Только самописный транслятор, в стандартной библиотеке ничего подобного нет. Ну, или искать что-то готовое на стороне, хотя такой примитив обычно можно найти только в учебниках про лексические анализаторы/парсеры :)
Только самописный транслятор, в стандартной библиотеке ничего подобного нет. Ну, или искать что-то готовое на стороне, хотя такой примитив обычно можно найти только в учебниках про лексические анализаторы/парсеры
В некоторых языках на этот случай есть возможность выполнять код в искусственном окружении, где опасных функций просто не будет (точнее, не будет вообще никаких функций, пока их поштучно не добавит туда программист). Нет ли такого в питоне?
Только самописный транслятор, в стандартной библиотеке ничего подобного нет. Ну, или искать что-то готовое на стороне, хотя такой примитив обычно можно найти только в учебниках про лексические анализаторы/парсеры
В некоторых языках на этот случай есть возможность выполнять код в искусственном окружении, где опасных функций просто не будет (точнее, не будет вообще никаких функций, пока их поштучно не добавит туда программист). Нет ли такого в питоне?
Да, только должен предупредить. Как в случае ручного вычисления, так и в случае трюков с eval() нужно что-то предпринять на случай сумашедших выражений. Например, "2 ** 2 ** 1000000" съест весь своп и сдохнет от OOM-киллера.