假设我已经在解释器中导入了一个Python模块。如何在解释器中获取导入模块的抽象语法树(以及其中的任何函数和类)?我不想重新解析源文件。谢谢!
假设我已经在解释器中导入了一个Python模块。如何在解释器中获取导入模块的抽象语法树(以及其中的任何函数和类)?我不想重新解析源文件。谢谢!
compiler
与inspect
结合(当然,仍然使用源代码):>>> import compiler, inspect
>>> import re # for testing
>>> compiler.parse(inspect.getsource(re))
Module('Support for regular expressions (RE). \n\nThis module provides ...
Python 3:
>>> import ast, inspect
>>> ast.parse(inspect.getsource(re))
<_ast.Module at 0x7fdcbd1ac550>
compiler
模块已被弃用。请改用ast.parse
。 - Jordan Dimovtextwrap.dedent(inspect.getsource(re))
,它可以处理在其他函数或类中定义的函数。(否则多余的前导空格会使解析器出错) - pschanely似乎没有其他方法可以从源代码之外获取AST。如果您解释一下为什么不想重新解析源文件,也许我们可以帮忙。
m.__file__
。重新阅读源代码应该很简单。正如MYYN所指出的那样,inspect
也有一些有用的方法。 - Ned Batchelder