Мне нужно динамически создать функцию из лямбда-выражения, которое предоставляется в виде строки (она будет прочитана из файла конфигурации).Я хочу позволить пользователю также указать список модулей, которые затем могут быть использованы в лямбда-выражении.Для этого мне нужно динамически загрузить модули и сделать их доступными, чтобы к ним можно было обращаться по имени в лямбда-выражении.
Ниже приведена возможная реализация того, что я хочу сделать:
import importlib
def create_function(lambda_expression, modules=[]):
for module in modules:
globals()[module] = importlib.import_module(module)
function = eval('lambda ' + lambda_expression)
return function
Это можно использовать так:
f = create_function('x: numpy.clip(x, 0, 1)', ['numpy'])
Однако использование globals()
не кажется хорошим решением.Есть ли более элегантный способ добиться этого?