首頁 >後端開發 >Python教學 >神器,輕鬆視覺化 Python 程式呼叫流程

神器,輕鬆視覺化 Python 程式呼叫流程

王林
王林轉載
2023-04-12 22:10:041618瀏覽

神器,輕鬆視覺化 Python 程式呼叫流程

我們先來看下效果圖:

神器,輕鬆視覺化 Python 程式呼叫流程

#怎麼樣,很是驚艷吧~

#下面我們就來一起完成這個視覺化過程。

1. 安裝 graphviz 工具

產生圖片的過程,是依賴工具 graphviz 的,我們先進行下載安裝。

下載網址

  • http://www.graphviz.org/download/

2. 實戰

接下來我們還需要安裝兩個Python 依賴函式庫。

pip install pycallgraph

下面我們先寫一個基礎的程式碼;

from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
class Banana:
 def eat(self):
 pass
class Person:
 def __init__(self):
 self.no_bananas()
 def no_bananas(self):
 self.bananas = []
 def add_banana(self, banana):
 self.bananas.append(banana)
 def eat_bananas(self):
 [banana.eat() for banana in self.bananas]
 self.no_bananas()
def main():
 graphviz = GraphvizOutput()
 graphviz.output_file = 'basic.png'
 with PyCallGraph(output=graphviz):
 person = Person()
 for a in range(10):
 person.add_banana(Banana())
 person.eat_bananas()
if __name__ == '__main__':
 main()

程式碼比較簡單,定義了兩個簡單類,主要pycallgraph 的核心程式碼在main 函數中,在with 程式碼區塊下,把我們定義的程式碼執行一遍即可

運行上面的程式碼,會在目前目錄下產生basic.png 圖片檔

神器,輕鬆視覺化 Python 程式呼叫流程

從產生的圖片可以非常清楚的看出整個程式碼的運行過程,從main 程式碼區塊到各個類別的初始化,可以說一目了然。

我們再來一個複雜一點的例子:

import re
from pycallgraph import PyCallGraph
from pycallgraph import Config
from pycallgraph.output import GraphvizOutput
def main():
 graphviz = GraphvizOutput()
 graphviz.output_file = 'regexp.png'
 config = Config(include_stdlib=True)
 with PyCallGraph(output=graphviz, config=config):
 reo = compile()
 match(reo)
def compile():
 return re.compile('^[abetors]*$')
def match(reo):
 [reo.match(a) for a in words()]
def words():
 return [
 'abbreviation',
 'abbreviations',
 'abettor',
 'abettors',
 'abilities',
 'ability',
 'abrasion',
 'abrasions',
 'abrasive',
 'abrasives',
 ]
if __name__ == '__main__':
 main()

程式碼同樣不負責,不過在編譯器內部是呼叫了re 正則的,我們來看看最終生成的圖片:

神器,輕鬆視覺化 Python 程式呼叫流程

可以看到整個程式碼過程複雜了很多,因為內部呼叫了很多正規內部函數等,但是整體還是非常清晰的

可以說這個神級第三方庫,絕對是眾多Python 愛好者,尤其是剛剛入門Python 領域的朋友的福音,當我們遇到某些不熟悉的較為複雜的程式碼塊時,不妨使用該庫來嘗試一下可視化,看看能不能從中爆發靈感呢~

以上是神器,輕鬆視覺化 Python 程式呼叫流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除