Есть ли способ получить функцию от пользователя в python с помощью различных функций python (т.е. если с персонализированным форматом)

Я делаю модель django, которая принимает строку от пользователя, и эта строка должна быть чем-то вроде '(some var)+15+IF((condition),(passed),(not passed))', и я хочу, чтобы она решала все это и, возможно, добавляла другие персонализированные функции в будущем, так что в основном для if это изначально не будет работать с eval из того, что я просмотрел.

Здесь много дискуссий о том, почему eval() может быть плохой практикой (как видно из комментариев) и других вопросов, подобных этому: Почему использование 'eval' является плохой практикой?

Однако, чтобы попытаться ответить на ваш вопрос, я бы разбил вашу проблему на две составляющие:

  1. Разбор пользовательского ввода в нечто понятное. В зависимости от того, как вы структурируете ввод, вы, скорее всего, получите множество .splits() и dict.get() для проверки пользовательского ввода и извлечения значений для обработки. Плюс проверка левой и правой переменных операторов. Возможно, уже существуют библиотеки, которые могут это делать. Вероятно, вы захотите фундаментально повторить что-то вроде системы формул Excel.

  2. Обработка ввода в функции python, вы можете сопоставить ключи словаря с вызываемыми функциями, так что вы могли бы сделать что-то вроде этого:

    import math, operator
    
    function_dict = {
       'SUM': sum,
       'SQRT': math.sqrt,
       '+': operator.add,
       ...
    }
    

    Затем вы можете передать ваши разобранные имена функций в dict и передать значения в сопоставленную функцию python. Использование чего-то вроде functools compose позволит вам соединить эти функции в цепочку.

Однако, в качестве более простого и более ориентированного на Django решения, вы можете рассмотреть использование форм, моделей и ограничение пользовательского ввода чем-то более жестким, чем свободный текстовый ввод.

Удачи! :)

Вернуться на верх