当前位置:主页 > 业界动态 > WEB3.0 > 神器,轻松可视化 Python 程序调用流程

神器,轻松可视化 Python 程序调用流程

2022-06-22 08:13:18来源:互联网

文章导读
作者 | 周萝卜 来源 | 萝卜大杂烩 今天我们来分享一个 Python 领域的神级第三方库 -- pycallgraph,通过该库并结合 graphviz 工具,就可以非常方便的完成 Python 应用程序调用流程的可视化工作~ 我们 ...

神器,轻松可视化 Python 程序调用流程

作者 | 周萝卜

来源 | 萝卜大杂烩

今天我们来分享一个 Python 领域的神级第三方库 -- pycallgraph,通过该库并结合 graphviz 工具,就可以非常方便的完成 Python 应用程序调用流程的可视化工作~

我们先来看下效果图:

神器,轻松可视化 Python 程序调用流程

怎么样,很是惊艳吧~

下面我们就来一起完成这个可视化过程


神器,轻松可视化 Python 程序调用流程

安装 graphviz 工具


生成图片的过程,是依赖工具 graphviz 的,我们先进行下载安装

下载地址


神器,轻松可视化 Python 程序调用流程

实战


接下来我们还需要安装两个 Python 依赖库

pipinstallpycallgraph

下面我们先写一个基础的代码

frompycallgraphimportPyCallGraph
frompycallgraph.outputimportGraphvizOutput


classBanana:
defeat(self):
pass


classPerson:
def__init__(self):
self.no_bananas()

defno_bananas(self):
self.bananas=[]

defadd_banana(self,banana):
self.bananas.append(banana)

defeat_bananas(self):
[banana.eat()forbananainself.bananas]
self.no_bananas()


defmain():
graphviz=GraphvizOutput()
graphviz.output_file='basic.png'

withPyCallGraph(output=graphviz):
person=Person()
forainrange(10):
person.add_banana(Banana())
person.eat_bananas()


if__name__=='__main__':
main()

代码比较简单,定义了两个简单类,主要 pycallgraph 的核心代码在 main 函数中,在 with 代码块下,把我们定义的代码执行一遍即可

运行上面的代码,会在当前目录下生成 basic.png 图片文件

神器,轻松可视化 Python 程序调用流程


从生成的图片可以非常清晰的看出整个代码的运行过程,从 main 代码块到各个类的初始化,可以说一目了然。

我们再来一个复杂一点的例子:

importre

frompycallgraphimportPyCallGraph
frompycallgraphimportConfig
frompycallgraph.outputimportGraphvizOutput


defmain():
graphviz=GraphvizOutput()
graphviz.output_file='regexp.png'
config=Config(include_stdlib=True)

withPyCallGraph(output=graphviz,config=config):
reo=compile()
match(reo)


defcompile():
returnre.compile('^[abetors]*$')


defmatch(reo):
[reo.match(a)forainwords()]


defwords():
return[
'abbreviation',
'abbreviations',
'abettor',
'abettors',
'abilities',
'ability',
'abrasion',
'abrasions',
'abrasive',
'abrasives',
]

if__name__=='__main__':
main()

代码同样不负责,不过在编译器内部是调用了 re 正则的,我们来看看最终生成的图片:


神器,轻松可视化 Python 程序调用流程


可以看到整个代码过程复杂了很多,因为内部调用了很多正则内部函数等,但是整体还是非常清晰的可以说这个神级第三方库,绝对是众多 Python 爱好者,尤其是刚刚入门 Python 领域的朋友的福音,当我们遇到某些不熟悉的较为复杂的代码块时,不妨使用该库来尝试一下可视化,看看能不能从中爆发灵感呢~

神器,轻松可视化 Python 程序调用流程


往期回顾





神器,轻松可视化 Python 程序调用流程

分享

神器,轻松可视化 Python 程序调用流程

点收藏

神器,轻松可视化 Python 程序调用流程

点点赞

神器,轻松可视化 Python 程序调用流程

热门文章
日榜 周榜
1 3月6日投资晚报|证监会:鼓励上市公司一年多次分红,上海电力

周三(2024年3月6日),A股市场早盘低开,午后开始反弹。上证指数涨上证指数跌0.26%,报3039...

2 金股挖掘| 绑定大众集团实现业务腾飞,电车时代来临,这家车

2023年我国汽车产业发展取得突破性进展,全年产销均超3000万辆,创历史新高,汽车出口首次跃...

3 调研早知道| 自有品牌战略进入全面收获期,这家企业海外市场

界面新闻记者 | 袁颖琪 跟随着我国白电“走出去”的步伐,有一家企业的优势正日益凸显。这...

4 盘中必读|今日共105股涨停,三大指数小幅下跌,新质生产力概念

3月6日,大盘午后震荡回落,三大指数均小幅下跌。截至收盘,沪指跌0.26%,深成指跌0.22%,创...

5 重大事项停牌前一度大涨17%,“量子通信第一股”国盾量子发生

界面新闻记者 | 冯雨晨 一番大涨之后,国盾量子(688027 .SH )宣布筹划重大事项停牌,引起市...

1 3月6日投资晚报|证监会:鼓励上市公司一年多次分红,上海电力

周三(2024年3月6日),A股市场早盘低开,午后开始反弹。上证指数涨上证指数跌0.26%,报3039...

2 金股挖掘| 绑定大众集团实现业务腾飞,电车时代来临,这家车

2023年我国汽车产业发展取得突破性进展,全年产销均超3000万辆,创历史新高,汽车出口首次跃...

3 调研早知道| 自有品牌战略进入全面收获期,这家企业海外市场

界面新闻记者 | 袁颖琪 跟随着我国白电“走出去”的步伐,有一家企业的优势正日益凸显。这...

4 盘中必读|今日共105股涨停,三大指数小幅下跌,新质生产力概念

3月6日,大盘午后震荡回落,三大指数均小幅下跌。截至收盘,沪指跌0.26%,深成指跌0.22%,创...

5 重大事项停牌前一度大涨17%,“量子通信第一股”国盾量子发生

界面新闻记者 | 冯雨晨 一番大涨之后,国盾量子(688027 .SH )宣布筹划重大事项停牌,引起市...

撤稿申请|

备案号:鄂ICP备2022006215号 Copyright © 2002-2022 metaversezj.com.cn 元宇宙之家 版权所有