我已經給出了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. 使用SCons構建外部代碼樹
- 2. 通過java代碼調用ant構建
- 3. 調用Python代碼
- 4. Android源代碼樹結構
- 5. TFS 2017構建爲代碼
- 6. 使用代碼引用構建AST與表達式樹
- 7. 構建Python OOP代碼和模塊
- 8. 使用gradle構建Java時跳過部分源代碼樹
- 9. 用scons構建源代碼?
- 10. python從源代碼構建:無法構建可選模塊sqlite3
- 11. 從Python調用PHP代碼
- 12. Sublime構建代碼
- 13. 構建ember.js代碼
- 14. 如何從源代碼構建VS代碼後進行調試?
- 15. 在Python腳本中爲C++代碼(make)運行構建
- 16. 爲python構建的迭代計數器
- 17. Python的文字,以樹結構創建
- 18. 爲ReSharper創建新的代碼重構
- 19. 從一個Android源代碼樹構建兩個APK
- 20. 從源代碼樹構建Linux內核模塊
- 21. 如何防止Hudson在構建後刪除源代碼樹?
- 22. 在android studio中使用python代碼構建android應用程序
- 23. ANTLR4:樹構建
- 24. 小Python代碼重構
- 25. KD樹,慢樹構建
- 26. 爲什麼這些python代碼實例都調用構造函數兩次?
- 27. 使用py2exe構建python代碼的可執行文件
- 28. 如何使用pygame構建Python 3.4.3源代碼以執行exe?
- 29. 使用pythonnet從python調用C#代碼
- 30. iOS:用於調試構建的可選代碼片段
爲什麼近距離投票?幾個月前,我問'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