Я столкнулся с несколькими связанными ответами, но не с тем, что хочу.Динамические функции Python из строк
Вот код, у меня сейчас:
code_str = """
print "this is my global x = " + x
print "And another line is done"
"""
x = 'mystery'
func_template = lambda p: None
func_template.__code__ = compile(code_str, '<string>', 'exec')
func_template() # this executes fine and also has access to x, which i do need.
# func_template('param') # This raises: TypeError: <module>() takes no arguments (1 given)
Некоторые фона; Code_str будет приходить из базы данных, и мне нужно хранить много функций в Словаре, так что я могу назвать какой-либо один по имени, как показано ниже:
all_funcs = {}
# Assuming db_result returns a list of name, code tuples from the databse
for name, code in db_result:
all_funcs[name] = my_compile(code)
Я хочу, чтобы потом просто вызвать нужную функцию с аргументы, которые я хочу, если я знаю имя:
result = all_funcs[by_name](arg1, arg2)
Edit: база данных является доверенным, так что я не нужно santize или беспокоиться о вредоносных программ.