python写出函数调用关系_python函数调用关系图(python call graph)

本文介绍三种Python工具:graphviz、pycallgraph及objgraph,帮助开发者快速生成函数调用关系图,提高代码重构效率。重点讲解了pycallgraph的安装与使用方法。

由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出结构,想找出一种通用的,节省人力的方法得出函数间的调用关系图,于是发现以下几个工具。(内网没装好graphviz,还没真正用上)

主要分下面三个模块了解一下python中如何生成函数关系调用图:

1、graphviz(Graph Visualization Software-图形可视化软件)

2、pycallgraph(创建python的可视化图形)

3、objgraph(查看python对象图)

1、graphviz

graphviz 是一个图形可视化软件,可使用dot文件生成关系图。

1.1、下载安装

官网下载安装包进行安装,有Linux和Windows版本。

或者直接用命令安装: sudo apt-get install graphviz

1.2、使用

安装后可使用dot命令将dot文件生成图片:

dot -Tpng *.dot -o *.png

更多用法可参考官网文档。

http://www.graphviz.org/Home.php

还有一个pygraphviz 不要和 下面介绍的pycallgraph混淆了。pygraphviz是用Python封装了graphviz使其可用python编写。

pygraphviz官网:http://pygraphviz.github.io/index.html

2、pycallgraph

pycallgraph 可以创建python函数关系可视化图形,因为其依赖于dot命令,需要先安装 graphviz。

2.1、下载安装

官网源码安装或使用pip:

pip install pycallgraph

2.2、使用

命令行使用(没试过):

pycallgraph graphviz -- ./mypythonscript.py

代码中使用:

from pycallgraph import PyCallGraph

from pycallgraph.output import GraphvizOutput with PyCallGraph(output=GraphvizOutput()): code_to_profile()

例子:

b8d97b5613f94ed2ba791cad57d0b2ed.gif

2f88dd3f1cd145f59c0e47b51acdbd4b.gif

1 #!/usr/bin/env python

2 '''

3 This example demonstrates a simple use of pycallgraph.4 '''

5 from pycallgraph importPyCallGraph6 from pycallgraph.output importGraphvizOutput7

8

9 classBanana:10

11 defeat(self):12 pass

13

14

15 classPerson:16

17 def __init__(self):18 self.no_bananas()19

20 defno_bananas(self):21 self.bananas =[]22

23 defadd_banana(self, banana):24 self.bananas.append(banana)25

26 defeat_bananas(self):27 [banana.eat() for banana inself.bananas]28 self.no_bananas()29

30

31 defmain():32 graphviz =GraphvizOutput()33 graphviz.output_file = 'basic.png'

34

35 with PyCallGraph(output=graphviz):36 person =Person()37 for a in xrange(10):38 person.add_banana(Banana())39 person.eat_bananas()40

41

42 if __name__ == '__main__':43 main()

View Code

运行代码,生成basic.png:

d7ec11030c64464b908bb783a5a28988.jpg

官网:

http://pycallgraph.slowchop.com/en/master/index.html

3、objgraph

( objgraph 和函数关系调用没什么关系,但是由于也使用dot,所以一并介绍。)

objgraph模块 一般用于分析python对象相关问题,如内存泄漏。

3.1、下载安装

可官网源码安装,也可使用pip安装:

pip install objgraph

3.2、使用

30e78ba50e4d421e840b384022ef30e8.jpg

3e2a5476cb8c43698bbb8b01b0647fee.png

生成图片:

3a02483360684e1ead4108aa11b70ed4.jpg

更多用法可参考官网:

http://mg.pov.lt/objgraph/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值