我有一个由字符串给出的函数的内容。我正在寻找一种方法如何将此字符串转换为函数对象来调用它。
content = "def my_function(x):\n return x**2"
my_function = extract_function_from_string(content) # extract_function_from_string ???
print my_function(5) # prints 25
也许,有一种方法可以将字符串转换为python模块并从中提取函数
答案 0 :(得分:1)
您可以使用exec
>>>content = "def my_function(x):\n return x**2"
>>>exec content
>>>my_function(5)
25
Python 3.x
>>>exec(content)
答案 1 :(得分:1)
尝试exec
声明:
>>> content = "def my_function(x):\n return x**2"
>>> exec content
>>> my_function(5)
25
答案 2 :(得分:1)
如果您知道函数名称,则可以对字符串运行exec。 Eval不起作用,因为它只针对表达式。见\r\n vs \n in python eval function。如果您不知道函数名称,但所有函数都具有相同的格式,您可以尝试这样的事情:
def extract_function_from_string(content):
exec(content)
start = 4
end = content.find("(")
function_name = content[start:end]
return eval(function_name)
my_function = extract_function_from_string("def my_function(x):\n return x**2")
print my_function(5)
很久以前火车离开了安全和健全的蟒蛇站,但我想这只是一种好奇心。
答案 3 :(得分:0)
这是完全没有留下蟒蛇安全列车的东西。
$ git branch -D old-abandoned-feature
答案 4 :(得分:-1)
您可以使用eval功能执行此操作。例如的eval( “打印( '你好')”)。
但是,请注意,这可能存在安全风险,并且可能有一种比解析字符串更好的方法。
答案 5 :(得分:-3)
a =" lambda x:x ** 2"
my_func = eval(a)
print my_func(3)