如何组织Python程序?

学习一个简单的技巧来保持Python代码的组织性和可维护性,即使项目随着时间的增长而增长。

你应该如何组织你的Python程序呢?

有没有什么推荐的办法使混乱归于有序?

如果你想写的东西不是几行Python代码可以搞定,那么你应该如何处理您的函数和其他构建模块呢?

关于这个话题,以下是来自newsletter成员的一些有趣的想法:

我一直觉得编程是告诉计算机一个故事。

如果你的故事是好的,计算机会有效地执行它,如果故事很烂,执行就糟透了。

我写代码就像写一篇技术论文,它有方向和流,你可以知道你什么时候得出故事的结论。

——可爱,并且真实的说法——

我用这种“叙述”的方法取得过很好的效果。它特别适用于单文件自动化或数据处理脚本。它可以帮助您保持代码的组织性和可维护性,即使随着项目增长也仍然如此。

让我们看看这在实践中是如何起作用的。首先我们将展示一个示例程序的逻辑流,然后我们将比较在Python中实现这种叙述手法的不同方法。

分析“程序叙事”

设想以下简单的报告生成器程序的高级逻辑流:

1.读取输入数据

2.执行计算

3.写报告

注意每个阶段(除了第一个外)都依赖于它前序阶段的副产物或输出:

1.读取输入数据

2.执行计算(基于输入数据)

3.写报告(基于报告数据)

依我看,你有两种选择:你既可以自上而下,也可以自下而上,实现这个逻辑流。

代码布局:自上而下 vs 自下而上

如果你的程序自下而上写,你的函数布局将匹配逻辑流,它将是从完全独立构建模块到那些依赖于它们结果的模块。

下面是一个“自下而上”实现的草图:

这种结构是“直观的”,不是吗?

在生成报告之前,我们首先需要读取输入文件,并且在写入磁盘之前,我们需要生成报告。

这种逻辑结构反映在程序的布局中。

[或者,在吓人的计算机科学术语中:这基本上是依赖关系图的拓扑排序。]

让我们来看一下“自上而下”的实现:

在一个“自上而下”的方法中,你会把原来的结构头翻转,先写最高阶的结构模块,然后再充实细节。

这将产生以下程序草图:

看看这次我是如何先写高层次的、“最非独立”的函数?

在顶部的“main()”函数明确声明这个程序要做什么,而不需要定义它究竟会如何达到预期的结果。

哪种方法更好?:

“自上而下”还是“自下而上”?

老实说,我认为他们之间没有太大的实际区别。

对我来说,重要的是他们都编了一个合乎逻辑的叙述,他们都是“给计算机讲故事”,他们有“方向和流”。

这是对我来说最重要的领悟。

一个人能做的最糟糕的事情是故意混淆这个逻辑结构,进而扼杀了叙事:

(呸!什么破程序?)

我现在显然只是在这用了一个小的“玩具”例子

但想象一下,如果一个程序的“叙述”有10、100、1000步,但却被语无伦次地组织在一起,会发生什么?

也许是出于作为德国人对秩序和稳定的需要,但根据我的经验,结果通常是混乱和疯狂:

“如果故事糟透了,执行也就糟透了”

你越是去实践这种“叙述流”的思维方式,把它作为构建程序的一种方式,你写起程序来就越自然、越自动化。

如果你想找一种方式来实践这种方法,那么你可以试图重温你的一些旧的Python代码,跟着这篇文章中列出的原则去重写或重构它们。

当然,你也可以把这个想法扩展到其他的“构建块”,比如类和模块,这些我们可以有时间再聊。

快乐的写python吧

英文原文:https://dbader.org/blog/how-to-structure-python-programs

译者:浙南菌

公众号

推荐

&

国内最大的互联网、通信、电子、金融类内部推荐平台,团队成员直接收简历,一步到位,准确迅速!

工作机会来自于行业顶级的知名公司,职位包括但不限于软硬件工程师、产品经理、项目经理、销售、机械等各个方面,机会多多!

关注成员多来自211、985名校,清华东南北理工,两电一邮中科大!各地精英,共享资源,互推靠谱高薪职位!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171217A03YNJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券