我正在构建一个编译器。我想检查传递给编译的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