我已经给出了Python代码以及它导入的模块。我想构建一个指示哪个函数调用其他函数的树。我怎样才能做到这一点?为Python代码构建调用树
-2
A
回答
1
可以使用ast
(抽象语法树)模块从Python标准库
# foo.py
def func(x):
print('hello')
解析使用ast.parse
文件:
import ast
tree = ast.parse(open('foo.py').read())
print(ast.dump(tree)) # dumps the whole tree
# get the function from the tree body (i.e. from the file's content)
func = tree.body[0]
# get the function argument names
arguments = [a.arg for a in func.args.args]
print('the functions is: %s(%s)' % (func.name, ', '.join(arguments)))
输出:
"Module(body=[FunctionDef(name='func', args=arguments(args=[arg(arg='x', annotation=None)], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]), body=[Expr(value=Call(func=Name(id='print', ctx=Load()), args=[Str(s='hello')], keywords=[]))], decorator_list=[], returns=None)])"
the functions is: func(x)
1
你应该从程序的主要功能开始,在第一层链接中,从main调用的所有函数将提供一个起点,然后可以链接它下面的所有函数。
相关问题
- 1. 为C代码建立调用树
- 2. 使用SCons构建外部代码树
- 3. 将.NET代码解析为调用树
- 4. 从代码表构建huffman树
- 5. 通过java代码调用ant构建
- 6. 调用Python代码
- 7. Android源代码树结构
- 8. TFS 2017构建为代码
- 9. 使用代码引用构建AST与表达式树
- 10. 从java中的唯一代码列表构建树结构
- 11. 构建Python OOP代码和模块
- 12. 如何使用源代码树配置自动构建?
- 13. bazel在Tensorflow源代码树之外构建tensorflow应用程序
- 14. 使用gradle构建Java时跳过部分源代码树
- 15. 重构Python代码
- 16. 重构Python代码
- 17. 用scons构建源代码?
- 18. python从源代码构建:无法构建可选模块sqlite3
- 19. 从Ruby调用python代码
- 20. 从python调用jython代码
- 21. 从Python调用PHP代码
- 22. 从python调用java代码
- 23. 构建Coq代码
- 24. 构建VB代码
- 25. Sublime构建代码
- 26. 构建ember.js代码
- 27. 如何从源代码构建VS代码后进行调试?
- 28. 在Python脚本中为C++代码(make)运行构建
- 29. Python代码调试
- 30. 为python构建的迭代计数器
为什么近距离投票?几个月前,我问'r'语言的类似问题,它被认为适合这个网站:https://stackoverflow.com/questions/44198599/build-a-file-diagram-for-an-r-code – DeltaIV
呃,实际上是接近的选票:)我想我必须要问这个Meta – DeltaIV
接近选民认为你的问题太宽泛了(不是吗?)。你也说过你在寻找一个可以自动完成的模块或工具,这意味着你的问题也是[off-topic](http://stackoverflow.com/help/on-topic)堆栈溢出。 – vaultah