Я работаю над проектом, который нуждается в некоторой гибкости для создания функций из пользовательских конфигураций:
, учитывая выражение '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
Есть ли лучший способ сделать это? Я слышал, что возиться с местными жителями () не очень хорошая идея, но я не уверен.
Любые предложения с благодарностью.