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

Posted AI科技大本营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神器,轻松可视化 Python 程序调用流程相关的知识,希望对你有一定的参考价值。

作者 | 周萝卜

来源 | 萝卜大杂烩

今天我们来分享一个 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可视化技巧!

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

分享
点收藏
点点赞
点在看

以上是关于神器,轻松可视化 Python 程序调用流程的主要内容,如果未能解决你的问题,请参考以下文章

有了这个神器,轻松用 Python 写 APP !

这是一款好用到爆可视化神器,它可轻松绘制炫酷动态图

掌握这个Python小技巧,轻松构建cytoscape导入文件

不写代码轻松实现数据可视化,这款基于SpringBoot的神器,简直绝了

可视化 Python 打包 exe,这个神器绝了!

监控神器:Prometheus 轻松入门,真香!