如何将函数转换为Python的str?

如何将函数转换为Python的str?,python,serialization,python-3.6,Python,Serialization,Python 3.6,假设我有一个lambda函数 fn = lambda x: print(x) 如果我想把它转换成字符串 "lambda x: print(x)" 我能做什么? 我原以为str(fn)或str(fn.\uuuu code\uuuu)会这样做,但不是真的……它只是打印出类型、内存位置等 我也尝试过pickle.dumps和json,但我无法得到我想要的 如何将函数转换为显示函数定义的字符串 ---我想将函数作为输入,并将其转换为字符串如果您安装了dill,那么这很容易。(pip安装dill)

假设我有一个lambda函数

fn = lambda x: print(x) 
如果我想把它转换成字符串

"lambda x: print(x)" 
我能做什么? 我原以为
str(fn)
str(fn.\uuuu code\uuuu)
会这样做,但不是真的……它只是打印出类型、内存位置等

我也尝试过pickle.dumps和json,但我无法得到我想要的

如何将函数转换为显示函数定义的字符串


---我想将函数作为输入,并将其转换为字符串

如果您安装了dill,那么这很容易。(
pip安装dill


您可以将其保留为字符串,并在需要运行时调用eval。@谢谢。但那不是我想要的。我想将函数作为输入,并将其转换为string@KevinJJ如果你正在接受一个输入,那显然是一个错误string@AmeyYadav不一定!我不是从文件或其他地方读取输入,而是在交互式shell中使用的python客户端,如果您想删除“squared=,那么可以使用str.replace或正则表达式。太棒了!谢谢我想投赞成票,但它说我的声誉太低,不能这么做:(没问题;)但你可以检查答案是否正确!我喜欢这个答案,但需要注意的是,它显示了定义
lambda
的整行。例如,如果在一个函数中定义为lambdas的正常值,则会得到包装函数调用(或至少是其中的一部分)。类似于
foo(arg1,arg2,lambda x:print(x))
dill
使用code对象中的信息读取源文件并从源文件中提取行。我收到了一些错误:我安装了dill,然后在运行上面的程序时,它要求我也安装了“pyreadline”,但我仍然收到错误:。。。。OSError:无法提取源代码
from dill.source import getsource
squared = lambda x:x**2
print(getsource(squared))