Для строки, такой как
"2*(i+j) <= 100"
Я хочу сгенерировать соответствующую лямбда-функцию,
fn = lambda i,j: 2*(i+j) <= 100
-
Я могу сделать это с помощью
eval
, но я ищу менее злой метод. -
Я нашел
import ast f = ast.Lambda('i,j', '2*(i+j) <= 100')
но я не знаю, как выполнить результат!
-
В идеале я хотел бы автоматически вывести список параметров ('i', 'j') - прямо сейчас, я просто использую re.findall('\ w +'), но я бы чтобы иметь возможность правильно использовать существующие функции, такие как
cos
вместо того, чтобы затенять их как "ключевые слова".
Я смотрел Есть ли библиотека Python для обработки сложных математических наборов (построена с использованием математической нотации set-builder)? и пытается выяснить, как лучше всего разобрать обозначение set-builder в lambdas для подачи на решатель ограничений.
Я в основном желаю ast.literal_eval, который также распознает переменные.
В идеале, учитывая i >= 20
, я хотел бы вернуться ((lambda x: x >= 20), ['i'])
, который я мог бы затем напрямую передать на constraint
.