创建一个常用的功能模块

时间:2012-07-15 10:11:54

标签: python code-design

我有一个包含数十个不同模块的大项目。 我确实有很多常用的功能,我在项目的很多地方都使用过。例如:

  • 检查字符串是否包含希伯来字符
  • 生成随机8个字母的字符串
  • 猜测二进制数据的图像mime类型
  • 转换HTML权利
  • 等等...

我的问题是:

  • 将所有这些功能放在将从每个代码文件加载的特定模块中是否常规?
  • 这个模块应该有什么名字? common.py
  • 我的代码分为不同的packages。通常将文件放在根代码文件夹中,并加载一个超出包范围的文件?

3 个答案:

答案 0 :(得分:8)

utilutils的变体似乎很常见。就个人而言,如果我有myproj.foomyproj.bar等软件包,我倾向于拥有一个myproj.util包,每个意图区域都有一个模块(对于Web相关可能myproj.util.http帮助程序,myproj.util.data用于数据结构操作等)。这些帮助程序比主代码更有可能被重用,并且清晰地分离到模块中(即使您最终拥有单类或单功能模块)也会使重用更容易。

答案 1 :(得分:4)

根据我的知识:

第一:如果这些功能,好吧,有1000s / 100s的行/功能,模块将变得越来越笨重,难以编辑将是它的正确选择,因为它有助于细粒度分类和轻微快速加载模块 - 正如 delnan 正确指出的那样 - 还有许多其他许多我目前都不知道的优点。

现在,假设您的项目在整个开发阶段只需要10-20个这样的功能,那么我建议单个模块可以做。

第二个 utilities 后跟特定名称为foo.py的特定模块。或者只是utilities.py

第3名:我很感激其他人的回答。

PS:经验法则。尽量保持utility函数独立于项目逻辑并尽可能通用。这样,您的函数可以在其他地方重用,而不会出现依赖性问题

编辑1-2:提高第一个答案的准确性

答案 2 :(得分:1)

我们一直将这些放在项目根目录下的core/模块下,每个模块都在自己的文件中(假设它们没有任何共同点)。我们之所以选择名称core只是因为这就是Django使用的名称,而from myproject.core import rand_string就是一定的逻辑。

对于较小模块的共性,例如Django应用程序,我们将函数放在应用程序根目录中的utils.py文件中 - 尽管我对该解决方案并不完全满意......