如何在Python中提取由内容字符串给出的函数

时间:2015-09-07 09:08:31

标签: python python-2.7

我有一个由字符串给出的函数的内容。我正在寻找一种方法如何将此字符串转换为函数对象来调用它。

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模块并从中提取函数

6 个答案:

答案 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)