Python:更喜欢几个小模块还是一个更大的模块?

时间:2009-08-02 20:49:24

标签: python refactoring module

我正在开发一个Python Web应用程序,其中我有一些小模块可以提供非常具体的功能:session.pylogger.pydatabase.py等等。并且通过“小”我的确意味着小;这些文件中的每一个目前包括大约3-5行代码,或者最多可能包含10行代码。我可能有一些导入和一个类定义或两个。我想知道,有什么理由我应该或不应该将这些合并到一个模块中,比如misc.py

我的想法是,拥有单独的模块有助于提高代码清晰度,稍后,如果这些模块有可能增长到10行以上,那么将它们分开就不会感觉如此糟糕。但另一方面,拥有一堆只有几行的文件似乎是一种浪费!并且多文件与单文件方法之间的资源使用有任何显着差异吗? (当然,我还远远不能担心资源的使用,但我忍不住要求......)

我检查过是否曾经问过这个问题,并没有看到任何特定于Python的内容,但如果它实际上是重复的,我会很感激被指向正确的方向。

6 个答案:

答案 0 :(得分:6)

作为模块的用户,我更喜欢通过单个导入包含整个模块。除非有某些理由允许导入不同的替换项,否则不要让您的包的用户进行多次导入。

顺便说一下,没有理由单个模块不能包含多个源文件。最简单的情况是使用__init__.py文件将所有其他代码加载到模块的命名空间中。

答案 1 :(得分:5)

  

我的想法是分开   模块有助于提高代码清晰度   稍后,如果有机会这些   模块增长到10多行,我   拥有它们会不会那么糟糕   分离。

此。保持它你的方式。

答案 2 :(得分:3)

我个人觉得将这样的事情保存在一个文件中更容易,只是为了在编辑器中编辑少量文件的实用性。

要做的重要事情是处理不同的代码片段,就好像它们位于不同的文件中一样,因此您可以确保以后可以轻松地将它们分开,原因就在于您引用的原因。因此,例如,不要在不同的部分之间引入依赖关系,以便以后很难解开它们。

答案 3 :(得分:3)

对于命令行脚本,除非每次调用都调用模块中的所有文件,否则很可能没有太大的区别,在这种情况下,由于需要打开n个文件,因此会有轻微的性能成本。

对于mod_python,由于字节编译模块在apache进程期间保持活动状态,因此很可能没有区别。

对于谷歌应用引擎虽然会有性能损失,除非该服务经常使用并且“热”,因为每次冷启动都需要打开所有文件。

答案 4 :(得分:2)

当然,您可以拥有任意数量的模块。

但现在让我们思考一下,当我们将每个小代码片段放入一个文件时会发生什么。

我们将在任何不太重要的模块中结束数百个import语句。当然,你也可以通过单独分隔文件来节省一点。但是猜猜:没有人能记住这么多模块名称,你最终可能会找到正确的文件...

我尝试将属于一起的东西放在一个文件中(除非它变得很大!)。但是当我的小函数或类不属于我的系统中的其他组件时,我有“util”模块等。我还尝试将这些分组,例如根据我的应用程序分层或通过其他方式分离它们。一个分离标准可以是:用于UI的实用程序和不用于UI的实用程序。

答案 5 :(得分:-1)

小。