Py学习  »  Python

如何组织Python程序?

Python程序员 • 6 年前 • 498 次点击  

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

学习一个简单的技巧来保持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
译者:浙南菌


公众号
推荐
&


校友同行内推公众号 IR-job


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


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


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


扫码关注,顶级公司,热门职位,扑面而来!

点击“阅读原文”,直接访问“校友同行内推”。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/pIJAOFUHVz
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4682
 
498 次点击