找到给定函数f的输出中涉及的所有函数和类?

时间:2015-11-19 19:21:23

标签: python abstract-syntax-tree

让我们说我有一个函数f:

def f():
    ...

是否有一种简单的方法可以找到f输出中涉及的所有函数(源代码+路径)和类(源代码+路径)?例如,如果f使用导入的函数g来计算其输出,我们是否可以获得源g +其路径?

也许python astdis库能够优雅地完成这项工作?

1 个答案:

答案 0 :(得分:1)

不,因为该信息仅在执行f时可用。假设您有以下f

def f(x):
    return x.text()

x是什么类型的?什么是text?谁知道! f不包含任何此类信息。

如果你实际上正在执行 f,你可以找出f依赖于特定执行的函数。例如,使用分析器,您可以执行

import cProfile
cProfile.runcall(f, x)

分析f(x)的执行情况并查看被调用的内容。如果您需要更多信息,可以根据profile模块构建一些内容来收集数据。但是,这仍然无法向您提供有关f在您未测试的情况下会调用的内容的任何信息。