Python 代码转流程图
在设计程序时,类图、流程图都是很有用的工具,我们有很多工具来绘制这些图纸,甚至还能用它们生成最基本的框架代码。也有时候我们需要把已经写好的代码反向转成类图、流程图,比如写作业和别人分享设计的时候。
代码转类图也有挺多工具的,VS Code、IntelliJ IDEA 这些常用的 IDE 都可以装插件来完成这一工作。而如果你做微软家的开发,Visual Studio 可选安装的“类设计器”,更是强到不像话,轻松吊打我见过的其他任何同类工具,就这一点来说, VS 对得起「宇宙第一 IDE」的称号。
然而,代码转流程图,相对来说,这个需求少一些,工具也没那么丰富。最近我突然需要把一些 Python 代码转成流程图,Google 翻了两页,GitHub 搜了几个项目,发现现有的实现都不太行:要么用的技术太怪(那些用「正则表达式」正面上的可震撼了我一下午),要么跑不起来(依赖条件苛刻,比如某些项目用了对 macOS 不太友好的 PyGame),要么跑出来太丑(凌乱的线条、奇怪的颜色,不是新丑风,是丑到抽风)。 当我看到某高赞项目 Vatsha/code_to_flowchart 甚至集合了上述三大“优点”时,,,我选择了自己动手撸一个 python to flowchart 的工具。
当然,我不是喷 Vatsha/code_to_flowchart,只是其一些细节真的欠优,有很大的改进空间。但不得不说,他的设计简单有效 ,用 PyGame 做可视化也很有新意。其实,我在做自己的实现时也大量参考了这个项目。
我的解决方案 PyFlowchart 基于大名鼎鼎的 flowchart.js。
(本来我是取名叫做 PyFlow 的,上传 PyPi 的时候发现重名了🤦♂️。所以改成了 PyFlowchart)
flowchart.js
如果你使用 Typora,可能知道在 Typora 中用 ```flow 可以用一种简单的文本语言来写流程图,根据 Typora 的文档,这个功能来自开源的 flowchart.js。
我的方案就是把 Python 代码转化成这种 flowchart 语言,然后你就可以借助 flowchart.js.org、Typora、 francoislaberge/diagrams 等等工具来生成流程图了。
st=>start: Start
op=>operation: Your Operation
cond=>condition: Yes or No?
e=>end
st->op->cond
cond(yes)->e
cond(no)->op
PyFlowchart
下面简要介绍如何使用我实现的 PyFlowchart,更详细的说明请看项目的 README。
安装 PyFlowchart:
$ pip3 install pyflowchart
写一个 simple.py
文件:
def foo(a, b):
if a:
print("a")
else:
for i in range(3):
print("b")
return a + b
运行 PyFlowchart:
$ python3 -m pyflowchart simple.py
它会输出 flowchart 代码:
st4439920016=>start: start foo
io4439920208=>inputoutput: input: a, b
cond4439920592=>condition: if a
sub4439974736=>subroutine: print('a')
io4439974672=>inputoutput: output: (a + b)
e4439974352=>