明天咱们来分享一个 Python 畛域的神级第三方库 — pycallgraph,通过该库并联合 graphviz 工具,就能够十分不便的实现 Python 应用程序调用流程的可视化工作
咱们先来看下效果图
怎么样,很是惊艳吧~
上面咱们就来一起实现这个可视化过程
装置 graphviz 工具
生成图片的过程,是依赖工具 graphviz 的,咱们先进行下载安装
下载地址
http://www.graphviz.org/downl…
实战
接下来咱们还须要装置两个 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 畛域的敌人的福音,当咱们遇到某些不相熟的较为简单的代码块时,无妨应用该库来尝试一下可视化,看看能不能从中暴发灵感呢~
以上就是本次分享的所有内容,如果你感觉文章还不错,欢送关注公众号:Python 编程学习圈 ,每日干货分享,发送“J”还可支付大量学习材料。或是返回编程学习网,理解更多编程技术常识。