最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python可視化程序調(diào)用流程解析

 更新時(shí)間:2022年08月20日 08:45:08   作者:周蘿卜  
這篇文章主要為大家介紹了可視化Python程序調(diào)用流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

今天我們來分享一個(gè) Python 領(lǐng)域的神級第三方庫 -- pycallgraph,通過該庫并結(jié)合 graphviz 工具,就可以非常方便的完成 Python 應(yīng)用程序調(diào)用流程的可視化工作

我們先來看下效果圖

怎么樣,很是驚艷吧~

下面我們就來一起完成這個(gè)可視化過程

安裝 graphviz 工具

生成圖片的過程,是依賴工具 graphviz 的,我們先進(jìn)行下載安裝

下載地址

www.graphviz.org/download/

詳細(xì)對于 graphviz 工具,大家應(yīng)該也熟悉了,我們以前通過該工具進(jìn)行過決策樹的可視化工作,具體可以看這里

數(shù)據(jù)分析入門系列教程-決策樹實(shí)戰(zhàn)

上面的鏈接一詳細(xì)的安裝配置過程,這里就不再贅述了

實(shí)戰(zhàn)

接下來我們還需要安裝兩個(gè)Python依賴庫

pip install pycallgraph

下面我們先寫一個(gè)基礎(chǔ)的代碼

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()

代碼比較簡單,定義了兩個(gè)簡單類,主要 pycallgraph 的核心代碼在 main 函數(shù)中,在 with 代碼塊下,把我們定義的代碼執(zhí)行一遍即可

運(yùn)行上面的代碼,會在當(dāng)前目錄下生成 basic.png 圖片文件

從生成的圖片可以非常清晰的看出整個(gè)代碼的運(yùn)行過程,從 main 代碼塊到各個(gè)類的初始化,可以說一目了然

我們再來一個(gè)復(fù)雜一點(diǎn)的例子

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()

代碼同樣不負(fù)責(zé),不過在編譯器內(nèi)部是調(diào)用了 re 正則的,我們來看看最終生成的圖片

可以看到整個(gè)代碼過程復(fù)雜了很多,因?yàn)閮?nèi)部調(diào)用了很多正則內(nèi)部函數(shù)等,但是整體還是非常清晰的

可以說這個(gè)神級第三方庫,絕對是眾多 Python 愛好者,尤其是剛剛?cè)腴T Python 領(lǐng)域的朋友的福音,當(dāng)我們遇到某些不熟悉的較為復(fù)雜的代碼塊時(shí),不妨使用該庫來嘗試一下可視化,看看能不能從中爆發(fā)靈感呢~

以上就是可視化Python程序調(diào)用流程解析的詳細(xì)內(nèi)容,更多關(guān)于可視化Python程序調(diào)用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • TensorFlow saver指定變量的存取

    TensorFlow saver指定變量的存取

    這篇文章主要為大家詳細(xì)介紹了TensorFlow saver指定變量的存取,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python讀csv文件去掉一列后再寫入新的文件實(shí)例

    Python讀csv文件去掉一列后再寫入新的文件實(shí)例

    下面小編就為大家分享一篇Python讀csv文件去掉一列后再寫入新的文件實(shí)例,具有很的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Python中def()函數(shù)的實(shí)戰(zhàn)練習(xí)題

    Python中def()函數(shù)的實(shí)戰(zhàn)練習(xí)題

    def是define的縮寫,用來自定義函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中def()函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Python根據(jù)字典的值查詢出對應(yīng)的鍵的方法

    Python根據(jù)字典的值查詢出對應(yīng)的鍵的方法

    這篇文章主要介紹了Python根據(jù)字典的值查詢出對應(yīng)的鍵的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python版DDOS攻擊腳本

    python版DDOS攻擊腳本

    這篇文章主要為大家詳細(xì)介紹了python版DDOS攻擊腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python中的類與類型示例詳解

    Python中的類與類型示例詳解

    這篇文章主要給大家介紹了關(guān)于Python中類與類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python Series從0開始索引的方法

    Python Series從0開始索引的方法

    今天小編就為大家分享一篇Python Series從0開始索引的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python Tornado 實(shí)現(xiàn)SSE服務(wù)端主動推送方案

    Python Tornado 實(shí)現(xiàn)SSE服務(wù)端主動推送方案

    SSE是Server-Sent Events 的簡稱,是一種服務(wù)器端到客戶端(瀏覽器)的單項(xiàng)消息推送,本文主要探索兩個(gè)方面的實(shí)踐一個(gè)是客戶端發(fā)送請求,服務(wù)端的返回是分多次進(jìn)行傳輸?shù)?直到傳輸完成,這種情況下請求結(jié)束后,考慮關(guān)閉SSE,所以這種連接可以認(rèn)為是暫時(shí)的,感興趣的朋友一起看看吧
    2024-01-01
  • Django中ORM找出內(nèi)容不為空的數(shù)據(jù)實(shí)例

    Django中ORM找出內(nèi)容不為空的數(shù)據(jù)實(shí)例

    這篇文章主要介紹了Django中ORM找出內(nèi)容不為空的數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python實(shí)現(xiàn)確認(rèn)字符串是否包含指定字符串的實(shí)例

    Python實(shí)現(xiàn)確認(rèn)字符串是否包含指定字符串的實(shí)例

    下面小編就為大家分享一篇Python實(shí)現(xiàn)確認(rèn)字符串是否包含指定字符串的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論

四子王旗| 四川省| 四子王旗| 班戈县| 商洛市| 泗阳县| 石河子市| 溆浦县| 平安县| 三门峡市| 资溪县| 巩留县| 寿宁县| 巫山县| 湖南省| 称多县| 达州市| 六盘水市| 沽源县| 许昌市| 旺苍县| 刚察县| 万安县| 南城县| 涞源县| 综艺| 崇明县| 马鞍山市| 枣阳市| 泗水县| 鹤壁市| 淮北市| 邯郸县| 黄龙县| 翁源县| 灵宝市| 和硕县| 普宁市| 龙游县| 湟中县| 喀喇沁旗|