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