9

我正在编写一个烧瓶应用程序,我发现我有大量的通用实用程序功能。

以下是我认为是通用实用函数的函数类型的示例:

def make_hash():
  return defaultdict(make_hash)

def file_read(filename):
  with open(file_name_, 'r') as f:
    return f.read()

def file_write(filename, data):
  with open(filename, 'w') as f:
    f.write(data)

我正在考虑将这些功能一起扔到一个单独的模块中。但是,我很好奇我是否有以下顾虑:

  • 有两个独特的功能可以保证一个单独的模块一起使用。即上面的file_read 和file_write 函数可以进入file.py 模块,但是由于它的两个函数,我觉得这可能是矫枉过正。
  • 在我的应用程序中,我每个函数使用这些函数 2-3 次,所以我在他们创建这些实用函数的幌子下移动,这应该可以帮助我节省一些代码行,并希望能让我更有效率。

问题: - 对通用实用程序函数进行分组的 Pythonic 方式是什么?我应该创建一个单独的模块吗?好奇其他人正在为组织这种类型的代码做什么。

4

3 回答 3

2

我认为它与 Python 没有太大关系,它更像是一个设计决定。

仅对于这些行,我不会制作单独的模块;但是,如果您使用它 2 到 3 次,我不会复制代码。如果您以后想要更改某些内容,只需进行一项更改,保持功能一致。

此外,这些方法似乎非常通用,因此您以后可以在其他项目中轻松使用它们。

我假设你想让它们成为静态的(@static_method)。

我主要做的是按类型对通用实用程序类进行分组,即在您的情况下,一个文件用于字典(具有 1 种方法)和一个用于文件(具有 2 种方法)。稍后可能会添加更多方法,但功能按类型/用途分组。

于 2013-04-29T09:13:32.400 回答
0

在 python 中,我们有一个叫做 Package 的东西(一个通常的文件夹,里面有一个名为 的空文件__init__.py),它用于包含所有模块,这样我们就可以创建某种名称间距。

您的应用程序可以使用 .

例如有以下文件

MyPackage/__init__.py (empty)
MyPackage/webapp.py (your web application)
MyPackage/utils.py (generic utilities)

在 webapp.py 你可以有这样的东西

from .utils import *

或一一列出

from .utils import file_read, file_write

注意utils前的点前缀

于 2013-04-29T09:18:32.817 回答
0

您可以采取一些措施来减少模块文件的数量,同时保留模块的子类别。创建多级模块函数:myModule.Hash.<> myModule.FileIO.<>

这样您就可以根据自己的喜好导入单个组件。

于 2013-04-29T09:20:37.977 回答