создать python функцию из строкового выражения - PullRequest
0 голосов
/ 27 марта 2020

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

, учитывая выражение 'a+b' и его список аргументов ('a', 'b'), создает функцию, которая выполняет суммирование.

Вот что у меня есть:

In [28]: def make_function(expression, arg_names): 
    ...:     def _func(*args):  
    ...:         locals().update(dict(zip(arg_names, args))) 
    ...:         return eval(expression) 
    ...:     return _func 
    ...:   

Чтобы убедиться, что это работает:

In [29]: f1 = make_function('a*b+c', ('a', 'b', 'c'))                                                                                                                                                         

In [30]: f2 = lambda a, b, c : a*b+c                                                                                                                                                                          

In [31]: f1(2, 3, 4)                                                                                                                                                                                          
Out[31]: 10

In [32]: f2(2, 3, 4)                                                                                                                                                                                          
Out[32]: 10

Есть ли лучший способ сделать это? Я слышал, что возиться с местными жителями () не очень хорошая идея, но я не уверен.

Любые предложения с благодарностью.

...