python:获取导入函数的抽象语法树?

Hei*_*ing 10 python abstract-syntax-tree

假设我已经在解释器中导入了一个python模块.如何在解释器中获取导入模块的抽象语法树(及其中的任何函数和类)?我不想重新解析源文件.谢谢!

mik*_*iku 8

也许你在这个食谱中找到了一些灵​​感:

一个输出Python AST的人类可读版本的函数.

或者compiler结合使用inspect(当然,仍然使用来源):

>>> import compiler, inspect
>>> import re # for testing 
>>> compiler.parse(inspect.getsource(re))
Module('Support for regular expressions (RE). \n\nThis module provides ...
Run Code Online (Sandbox Code Playgroud)

  • 还可以考虑使用“textwrap.dedent(inspect.getsource(re))”,它将处理其他函数或类中定义的函数。(否则额外的前导空格会让解析器生气) (3认同)
  • 在Python 3中,`compiler`模块已被弃用。使用`ast.parse`代替。 (2认同)