对于我目前的工作,我正在编写一些长时间运行的脚本(从几小时到几天),这些脚本执行CPU密集型数据处理。程序流程非常简单-它进入主循环,完成主循环,保存输出并终止:我的程序的基本结构是这样的:
<import statements>
<constant declarations>
<misc function declarations>
def main():
for blah in blahs():
<lots of local variables>
<lots of tightly coupled computation>
for something in somethings():
<lots more local variables>
<lots more computation>
<etc., etc.>
<save results>
if __name__ == "__main__":
main()
这很快就变得不可管理了,所以我想把它重构成更易于管理的东西。我希望在不牺牲执行速度的情况下使其更易于维护。在
然而,每一堆代码都依赖于大量的变量,因此将计算的部分重构为函数会使参数列表迅速增长。我是否应该将这类代码放入python类中,并将局部变量更改为类变量?从概念上讲,将程序转换为类没有多大意义,因为类永远不会被重用,而且每个实例只会创建一个实例。在
这类课程的最佳实践结构是什么?我使用的是python,但问题是相对语言不可知的,假设是现代面向对象语言的特性。在
不太干净,但在小项目中效果很好。。。在
您可以开始使用模块,就好像它们是单例实例一样,并且只有当您感觉到模块的复杂性或计算证明了它们的合理性时,才能创建真正的类。在
如果你不想从模块中导入的话,你最好还是把它从模块中导入。此外,谷歌指南中也推荐了这一点。在
使用一个或多个类可以帮助您组织代码。 形式的简单性(例如通过使用类属性和方法)很重要,因为它可以帮助您了解算法,并可以帮助您更轻松地对部分进行单元测试。在
在我看来,这些好处远远超过了使用OOP可能带来的速度损失。在
首先,如果您的程序要运行数小时/天,那么切换到使用类/方法而不是将所有内容放在一个巨大的main中的开销几乎是不存在的。在
此外,重构(即使它涉及传递很多变量)从长远来看应该有助于提高速度。分析一个设计良好的应用程序要容易得多,因为你可以定位慢的部分并在那里进行优化。也许会有一个新的库来为你的计算进行高度优化。。。一个设计良好的程序可以让你马上插入测试。或者您决定编写一个C模块扩展来提高计算子集的速度,一个设计良好的应用程序也会使这一点变得容易。在
如果没有看到},很难给出具体的建议。但是,我会从使每个
<lots of tightly coupled computation>
和{for
块都有自己的方法开始,然后从那里开始。在相关问题 更多 >
编程相关推荐