1) Да, можно проанализировать результаты анализа вашего выражения и сохранить его в базе данных. Затем вы можете просто извлечь и распаковать выражение, а не повторно анализировать оригинал.
2) Вы можете выполнить быстрый и грязный проход, просто используя встроенные модули compile и eval, как в следующем интерактивном сеансе:
>>> y = compile("m*x+b","","eval")
>>> m = 100
>>> x = 5
>>> b = 1
>>> eval(y)
501
Конечно, в этом есть ловушки безопасности любой реализации на основе eval или exec, поскольку в ненадежных или вредоносных исходных строках могут встраиваться вредоносные системные вызовы. Но если это ваш тезис и полностью находится в пределах вашей компетенции, просто не делайте глупостей.
3) Вы можете получить онлайновый пример синтаксического анализа выражения в «оцениваемую» структуру данных на странице «Примеры» випаризации. Проверьте simpleBool.py и evalArith.py особенно. Если вы чувствуете себя не в своей тарелке, закажите предыдущий выпуск май 2008 года журнала Python, в котором есть моя статья «Написание простого интерпретатора / компилятора с Pyparsing» с более подробным описанием используемых методов. , а также описание того, как работает выборка и удаление результатов анализа.
4) Медленной частью будет синтаксический анализ, так что вы на правильном пути в сохранении этих результатов в некоторой промежуточной и повторяемой оценке форме. Eval часть должна быть довольно быстрой. Вторая медленная часть будет в получении этих засоленных структур из вашей базы данных. Во время выполнения MC я бы упаковал одну функцию, которая принимает параметры выбора для выражения, выбирает из базы данных, снимает с выбора и возвращает вычисляемое выражение. Затем, когда у вас все получится, используйте декоратор memoize для кэширования этих пар «запрос-результат», так что любое данное выражение нужно только один раз выбрать / извлечь.
Удачи с диссертацией!