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

Python:喜欢几个小模块还是一个大模块?,python,refactoring,module,Python,Refactoring,Module,我正在开发一个Python web应用程序,其中有一些小模块,可以提供非常特定的功能:session.py、logger.py、database.py,等等。我说的“小”实际上是指小;每个文件目前包含大约3-5行代码,或者最多10行。我可能会有一些导入和一个或两个类定义。我想知道,有什么理由我应该或者不应该将它们合并到一个模块中,比如misc.py 我的想法是,拥有独立的模块有助于代码的清晰性,以后,如果这些模块有机会增长到10行以上,我将不会对将它们分开感到太糟糕。但另一方面,拥有一堆文件,每

我正在开发一个Python web应用程序,其中有一些小模块,可以提供非常特定的功能:
session.py
logger.py
database.py
,等等。我说的“小”实际上是指小;每个文件目前包含大约3-5行代码,或者最多10行。我可能会有一些导入和一个或两个类定义。我想知道,有什么理由我应该或者不应该将它们合并到一个模块中,比如
misc.py

我的想法是,拥有独立的模块有助于代码的清晰性,以后,如果这些模块有机会增长到10行以上,我将不会对将它们分开感到太糟糕。但另一方面,拥有一堆文件,每个文件中只有几行,这似乎是一种浪费!多文件方法与单文件方法在资源使用方面是否有显著差异?(当然,我还远没有到应该担心资源使用的地步,但我忍不住要问……)

我四处查看,看看是否有人问过这个问题,但没有看到任何特定于Python的内容,但如果它实际上是一个副本,我希望能指出正确的方向

我的想法是,要分开 模块有助于代码的清晰性,以及 以后,如果碰巧这些 模块扩展到10多行,I 不会因为拥有它们而感到难过 分开


这个。保持现状

就我个人而言,我发现将这样的内容保存在一个文件中更容易,只是为了在我的编辑器中编辑少量文件的实用性


要做的重要事情是将不同的代码片段视为在不同的文件中,这样您就可以确保以后可以根据您引用的原因轻松地将它们分开。因此,例如,不要在不同的部分之间引入依赖关系,这将使以后很难将它们分开。

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

但现在让我们想一想,当我们把每一个小代码片段放在一个文件中时会发生什么

在任何不那么琐碎的模块中,我们都将得到数百条导入语句。当然,通过在单独的文件中显式保存所有内容,也可以节省一点时间。但是你猜怎么着:没有人能记住这么多的模块名,你最终可能会搜索到正确的文件


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

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


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

Small

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

对于mod_python,由于字节编译模块在apache进程期间保持活动状态,因此很可能不会有什么不同


对于google app engine而言,除非该服务持续使用且“热”,否则性能会受到影响,因为每次冷启动都需要打开所有文件。

+1模块是重用单元。如果您曾经考虑过重用它,请将其分开。导入模块会导致文件查找/读取操作,这非常昂贵。因此,拥有模块会带来不菲的应用程序启动成本。除非以压缩模式分发代码,否则拥有几百个模块将花费您2-5秒的时间来导入。(如果从网络导入,则更多)。“拥有模块的应用程序启动成本非常高”?真正地我从来没有注意到。你有尺码吗?你能展示这个“非琐碎”的成本吗?我们有一个运行数天的web服务器。你是说,与100小时的运行时间相比,导入是可以测量的吗?好吧,导入成本通常以秒为单位,即使对于较大的应用程序也是如此,并且通常是在启动时,因此对于长时间运行的过程来说,导入成本可能不会太大。但是,如果您正在构建一个用户可启动的应用程序或创建一个子流程来并行执行某些任务,那么它可能会产生很大的不同。+1这是一个有趣的方式。就个人而言,如果我要将代码片段视为单独的文件,我宁愿将它们放在单独的文件中。但这是我个人的看法。让模块的用户觉得它是一个整体,但保持实现的分散性、明确性和易于分解。我还要补充的是,拥有许多独立的模块有助于(数据/实现)隐藏/封装/。模糊。。。。。。。。。。。。。。。