我们先来看下效果图: 怎么样,神器很是轻松惊艳吧~ 下面我们就来一起完成这个可视化过程。 生成图片的可视过程,是程程依赖工具 graphviz 的,我们先进行下载安装。序调 下载地址 接下来我们还需要安装两个 Python 依赖库。用流 下面我们先写一个基础的神器代码; 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__: 代码比较简单,定义了两个简单类,轻松主要 pycallgraph 的可视核心代码在 main 函数中,在 with 代码块下,程程把我们定义的云南idc服务商序调代码执行一遍即可 运行上面的代码,会在当前目录下生成 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__: 代码同样不负责,不过在编译器内部是调用了 re 正则的,我们来看看最终生成的图片: 可以看到整个代码过程复杂了很多,香港云服务器因为内部调用了很多正则内部函数等,但是整体还是非常清晰的 可以说这个神级第三方库,绝对是众多 Python 爱好者,尤其是刚刚入门 Python 领域的朋友的福音,当我们遇到某些不熟悉的较为复杂的代码块时,不妨使用该库来尝试一下可视化,看看能不能从中爆发灵感呢~1. 安装 graphviz 工具
2. 实战