Python可视化程序调用流程解析

作者:周萝卜 时间:2022-07-18 15:53:07 

引言

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

我们先来看下效果图

Python可视化程序调用流程解析

怎么样,很是惊艳吧~

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

安装 graphviz 工具

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

下载地址

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 图片文件

Python可视化程序调用流程解析

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

来源:https://juejin.cn/post/7125389348500930568

标签:Python,可视化,程序调用
0
投稿

猜你喜欢

  • MYSQL教程:my.cnf缓存优化

    2009-07-30 08:58:00
  • 通向MySQL神秘王国的图形化之路

    2008-12-08 13:43:00
  • 美化段落文本 1

    2008-05-15 12:24:00
  • 浅谈哪个Python库才最适合做数据可视化

    2022-12-05 00:34:58
  • Python采集王者皮肤图片实战示例

    2021-08-02 12:09:23
  • Python Selenium参数配置方法解析

    2023-12-28 09:20:02
  • 设置SQLServer数据库中某些表为只读的多种方法分享

    2012-07-11 15:41:05
  • 以独占方式打开Access数据库

    2007-10-22 12:24:00
  • 完美解决torch.cuda.is_available()一直返回False的玄学方法

    2023-04-05 18:17:34
  • python探索之BaseHTTPServer-实现Web服务器介绍

    2023-06-03 03:14:34
  • python求斐波那契数列示例分享

    2022-07-20 19:32:10
  • SQL Server 2005 五个动态管理对象

    2008-12-18 14:50:00
  • 详解django中自定义标签和过滤器

    2021-02-16 19:43:38
  • OpenCV计算平均值cv::mean实例代码

    2023-06-19 10:26:02
  • Python中最好用的命令行参数解析工具(argparse)

    2022-12-30 06:34:31
  • 基于wxpython开发的简单gui计算器实例

    2023-09-09 04:42:25
  • CSS Type set: 在线字体调整工具

    2008-03-02 15:36:00
  • Python实现带图形界面的炸金花游戏

    2021-06-21 15:41:56
  • Python selenium爬取微博数据代码实例

    2023-07-01 02:46:49
  • Pyside2中嵌入Matplotlib的绘图的实现

    2021-09-15 22:34:03
  • asp之家 网络编程 m.aspxhome.com