Странное поведение eval () с лямбда-функциями внутри цикла в python - PullRequest
0 голосов
/ 31 мая 2018

У меня есть строковый входной файл, как показано ниже (одно уравнение на строку): 1,0 - x [0] - x [1] x [0] + x [1]

Я пытаюсь преобразовать этиУравнения для лямбда-функций с помощью eval () в Python, а затем использовать их в схеме оптимизации.Вот что я делаю:

def gen_const(input):
    list = input.read_eqs()
    for i in list:
        m = lambda x: eval(i)
        cons.extend([{'type': 'ineq', 'fun': m}])
    return cons

Этот минус не работает, когда он используется внутри схемы оптимизации.Однако, если я рассматриваю только первый раунд внутри цикла (то есть первое уравнение), ограничение работает нормально:

def gen_const(input):
    list = input.read_eqs
    for i in list[0:1]:
        m = lambda x: eval(i)
        cons.extend([{'type': 'ineq', 'fun': m}])
    return cons

Как ни странно, когда я копирую точно такие же уравнения (буквально копировать из входного файла,одинаковые символы, интервал) тоже работает нормально:

def gen_const(input):
    list = input.read_eqs
    m0 = '1.0 - x[0] - x[1]'
    m1 = 'x[0] + x[1]'
    cons.extend([{'type': 'ineq', 'fun': lambda x: eval(m0)}])
    cons.extend([{'type': 'ineq', 'fun': lambda x: eval(m1)}])
return cons

Так что я вижу странное поведение eval () внутри цикла, и я действительно застрял.Я читал, что eval - это зло, и искал альтернативы, но не смог найти лучшего способа, который бы помог моей проблеме.Буду очень признателен за вашу помощь.

...