我在某种形式的AST中有一些代码,我想执行它。
我可以想到几种方法,例如:
ast
模块)和
compile
或eval
那个。compile
或eval
那个。我想我会通过将其转换为Python AST compile
并执行它来获得禁食执行。 ESP。使用PyPy时,我甚至可能通过PyPys JIT编译优化得到改进(我希望我这样做,是吗?)。
您能想到其他可能性吗?你能就什么是最好的方式提出建议吗?
答案 0 :(得分:1)
另一种可能性:转换为Cython代码,写出文件,使用Cython编译然后打开优化的C编译器,加载生成的模块并执行它。
如果代码具有可以转换为Cython / C类型的类型注释,那么这可能非常快。但要注意,因为Cython处于测试阶段并且仍然有点粗糙。此外,此解决方案仅适用于CPython。
答案 1 :(得分:0)
另一种可能性:将AST直接转换为Python字节码并执行它。这就像你最后的想法,除了使用现有的Python VM。
这不是伟大的可能性,因为它可能是很多工作而Python compile
可能会做得更好,除非在相当特殊的情况下,但我只是扔它在那里。