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

网友投稿 925 2022-10-04

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

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

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

我们先来看下效果图

怎么样,很是惊艳吧~

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

安装 graphviz 工具

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

-

​​graphviz 工具,大家应该也熟悉了,我们以前通过该工具进行过决策树的可视化工作,具体可以看这里

​​数据分析入门系列教程-决策树实战​​

上面的链接包含了详细的安装配置过程,这里就不再赘述了

实战

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

pip install pycallgraph

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

from pycallgraph import PyCallGraphfrom pycallgraph.output import GraphvizOutputclass Banana: def eat(self): passclass 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 图片文件

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

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

import refrom pycallgraph import PyCallGraphfrom pycallgraph import Configfrom pycallgraph.output import GraphvizOutputdef 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 领域的朋友的福音,当我们遇到某些不熟悉的较为复杂的代码块时,不妨使用该库来尝试一下可视化,看看能不能从中爆发灵感呢~

好了,这就是今天分享的全部内容,喜欢就点个赞吧~

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mpvue中小程序自定义导航组件开发的介绍(代码示例)
下一篇:精心整理了100+Python字符串常用操作,收藏备用!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~