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

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

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

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

相关文章
|
1天前
|
存储 区块链 Python
怎么把Python脚本打包成可执行程序?
最近根据用户提的需求用python做了一个小工具,但是在给客户使用的时候不能直接发送python文件,毕竟让客户去安装python环境,那就离了大谱了。所以这时候就需要把多个py文件带着运行环境打包成EXE可执行文件。
怎么把Python脚本打包成可执行程序?
|
4天前
|
Shell 开发工具 git
[oeasy]python019_ 如何在github仓库中进入目录_找到程序代码_找到代码
本文档介绍了如何在终端环境下使用Git克隆仓库后,通过`cd`、`pwd`和`ls`命令导航并找到下载的文件。首先,使用`ls`查看当前目录,然后通过`cd`逐层进入目标文件夹,最后到达包含游戏文件game.py的位置。文章还提到了如果`git clone`失败,可以直接进行下一节实验。
12 0
|
4天前
|
Python
Python程序的基本结构及其使用技术
Python程序的基本结构及其使用技术
13 6
|
5天前
|
数据采集 机器学习/深度学习 数据可视化
使用Python进行简单的数据分析与可视化
使用Python进行简单的数据分析与可视化
84 0
|
5天前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析与可视化
使用Python进行数据分析与可视化
24 3
|
7天前
|
数据采集 机器学习/深度学习 算法
利用Python实现高效的数据清洗与预处理流程
在数据驱动的时代,数据清洗和预处理是数据分析与机器学习项目中至关重要的步骤。本文将介绍如何利用Python的pandas和numpy库,结合正则表达式、数据标准化和缺失值填充等技术,构建一个高效且灵活的数据清洗与预处理流程。文章不仅关注技术细节,还将探讨如何通过流程自动化和模块化来提升数据清洗的效率和准确性。
|
7天前
|
数据采集 数据挖掘 Serverless
利用Python和Pandas库优化数据清洗流程
在数据分析项目中,数据清洗是至关重要的一步。传统的数据清洗方法往往繁琐且易出错。本文将介绍如何利用Python编程语言中的Pandas库,通过其强大的数据处理能力,实现高效、自动化的数据清洗流程。我们将探讨Pandas库在数据清洗中的应用,包括缺失值处理、重复值识别、数据类型转换等,并通过一个实际案例展示如何利用Pandas优化数据清洗流程,提升数据质量。
|
8天前
|
Linux Python Windows
打包Python程序文件:pyinstaller实现
本文介绍基于Python语言中的pyinstaller模块,将写好的.py格式的Python代码及其所用到的所有第三方库打包,生成.exe格式的可执行文件,从而方便地在其他环境、其他电脑中直接执行这一可执行文件的方法。
|
9天前
|
人工智能 数据挖掘 Python
Python基础语法与流程控制
Python基础语法与流程控制
21 1
|
9天前
|
Python
Python中的控制流程详解
Python中的控制流程详解