神器,轻松可视化Python程序调用流程
神器,轻松,可视化,Python,程序,调用,流程
2025-03-18 08:48:46 时间
今天我们来分享一个 Python 领域的神级第三方库 -- pycallgraph,通过该库并结合 graphviz 工具,就可以非常方便的完成 Python 应用程序调用流程的可视化工作
我们先来看下效果图
怎么样,很是惊艳吧~
下面我们就来一起完成这个可视化过程
安装 graphviz 工具
生成图片的过程,是依赖工具 graphviz 的,我们先进行下载安装
下载地址
http://www.graphviz.org/download/
详细对于 graphviz 工具,大家应该也熟悉了,我们以前通过该工具进行过决策树的可视化工作,具体可以看这里
上面的链接包含了详细的安装配置过程,这里就不再赘述了
实战
接下来我们还需要安装两个 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 领域的朋友的福音,当我们遇到某些不熟悉的较为复杂的代码块时,不妨使用该库来尝试一下可视化,看看能不能从中爆发灵感呢~
好了,这就是今天分享的全部内容
相关文章
- 通过pycharm安装python_python pycharm安装
- python和pycharm以及anaconda的安装顺序_症证病三者之间区别
- 如何理解python报错信息_csb报错
- python ssh连接_pycharm显示no module named
- 提升python运行速度的一些技巧
- Python一键生成国庆渐变头像
- Python安装第三方库(离线+在线)
- Python进阶39-drf框架(一)
- python报错no module named_pycharm报错no module named
- 造数据神器Faker,一个有趣又实用的Python第三方库
- python安装numpy后pycharm导入不了_python的numpy库
- pycharm换行继续输入_python粘贴代码自动换行
- maven找不到包但是确实引入了_idea写python好吗
- pycharm中pyqt5使用方法_python环境变量的配置
- Linux 上使用 crontab 设置定时任务及运行 Python 代码不执行的解决方案
- Python绘制时间演变图工具汇总(附代码)
- pycharm 风格_python主题更改
- Python项目50-Celery框架
- pycharm2020.3.3使用_pycharm更新python版本
- Python基础14-内置模块