我已經給出了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