检查lambda函数体



我正在构建一个编译器。我想检查传递给编译的lambda函数,以便我可以生成优化的代码,如:

f(fn):
print(fn.body)   # how can I write this?
if fn.body == 2*x:  # is this possible?
return lambda x: x << 1 
f(lambda x : 2 * x)

我知道检查模块,但我没有找到一种方法来查看lambda函数。例如,我试着这样做:

def foo(p):
print("code: %a" % getsource(p))
foo(lambda x: x + 1)

但是它会打印foo(lambda x: x + 1)n而不仅仅是lambda x: x + 1

尝试uncompyle6包。

import uncompyle6
f = lambda x: x*2
uncompyle6.deparse_code2str(f.__code__)

返回str代码:

return x * 2

最新更新