获取整个函数作为字符串/并将字符串转换为函数?

时间:2018-05-28 21:55:57

标签: python string python-3.x function delegates

我想获得一个完整的Python函数并将其保存为字符串(例如,Javascript可以只执行functionString = functionVar.toString()

示例:

#I defined a function with a body:
def someFunction(hey):
    return hey + hey + hey

我想将此函数转换为字符串,并获得与我上面输入的文本完全相同的文本(当然没有评论)

然后我想做反向操作:从字符串中,将其转换为函数并将其存储在要调用的变量中。

1 个答案:

答案 0 :(得分:3)

使用exec您几乎可以得到您所要求的内容。将函数编码为字符串是很容易的部分。

"""Encode the function as a string"""
import inspect

funcString = inspect.getsource(someFunction)

从字符串中检索函数是一项更多的工作。以下方法会在您尝试恢复的函数范围之外出现全局变量或其他变量的问题,但如果源完全指定它,则以下想法应该有效。

d = {}
exec(funcString, d)
f = next(d[k] for k in d if k != '__builtins__')

运行后,首先用于生成f的源定义的代码将绑定到变量f