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

百家 作者:AI100 2022-06-21 19:14:14

作者 | 周萝卜

来源 | 萝卜大杂烩

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

我们先来看下效果图:

怎么样,很是惊艳吧~

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


安装 graphviz 工具


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

下载地址

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


实战


接下来我们还需要安装两个 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 图片文件


从生成的图片可以非常清晰的看出整个代码的运行过程,从 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 领域的朋友的福音,当我们遇到某些不熟悉的较为复杂的代码块时,不妨使用该库来尝试一下可视化,看看能不能从中爆发灵感呢~

往期回顾

Matplotlib绘制圆环图的两种方法!


13个python必备的知识,建议收藏!


趣味十足的Python可视化技巧!


低代码走出半生,归来仍是"毒瘤"!


分享

点收藏

点点赞

点在看

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接