Python—通用函数的最佳位置

Python—通用函数的最佳位置,python,function,utility,Python,Function,Utility,我正在编写一个flask应用程序,我发现我有很多通用实用程序函数 这里是我考虑通用效用函数的函数类型的例子: 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:

我正在编写一个flask应用程序,我发现我有很多通用实用程序函数

这里是我考虑通用效用函数的函数类型的例子:

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)
我正在考虑将这些函数一起放到一个单独的模块中。然而,我很好奇我是否有以下顾虑:

  • 有两个独特的功能可以保证一个单独的模块。i、 e.上面的file_read和file_write函数可以进入file.py模块,但是由于它有两个函数,我觉得这可能有些过分
  • 在我的应用程序中,我每个函数使用这些函数2-3次,因此我在伪装下移动。他们创建这些实用程序函数应该可以帮助我节省一些代码行,并希望能够提高我的效率
问题:
-将通用实用程序函数分组的Python方式是什么?我应该创建一个单独的模块吗?我很好奇其他人在组织这种类型的代码方面做了什么。

我认为它与Python没有太大关系,它更多的是一个设计决策

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

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

我假设您想使它们成为静态的(
@static\u方法


我主要做的是按类型对通用实用程序类进行分组,即在您的示例中,一个文件用于字典(有1个方法),另一个文件用于文件(有2个方法)。以后可能会添加更多的方法,但功能是按类型/用法分组的。

在python中,我们有一个名为Package的东西(一个通常的文件夹,其中有一个名为
\uuuu init\uuuu.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

注意UTIL之前的点前缀

您可以做一些事情来减少模块文件的数量,同时保留模块的子分类。。创建多级模块功能: myModule.Hash。 myModule.FileIO


通过这种方式,您可以根据自己的喜好导入单个组件。

import*通常被认为是一个坏方法practice@Kiro,一般来说,您是对的,但在这种特定情况下,这是可以的,因为utils.py是他将要放置公共函数的地方,比如他的php版本的file_get_contents。如果您同意,您可以定义
\uuuuu all\uuuu
谢谢您的回复。这是一个很好的答案,我计划使用此解决方案的一个变体。@muayyadalsadi:star导入仍然是一种不好的做法-它们使代码更难理解(您必须打开utils.py才能知道您导入的符号),在utils.py中添加一个新符号可能会在从它开始导入的模块中隐藏现有符号。答案是如何将utils打包到自己的名称空间中,而不是开始导入东西。我已经更新了我的答案,以说明如何导入特定的函数。这很有意义。我不愿意把它放在一个类中,只是因为我(可能是错误的)预先设想了只为特定于应用程序的项创建类的概念。但是,我想我将使用您提供的上述解决方案制作一款混合动力车。。i、 e.带有文件/字典模块的实用程序包。您上面提供的分组对我来说似乎是合理的,正如您所说的,我可以在生成更通用的函数时扩展这些模块,并且可以对它们进行移植。此外,我很可能会使这些独立于应用程序。谢谢你的反馈。为什么是“类”和“静态方法”?Python不是Java,当您只需要一个函数时,请务必使用一个函数。@user2152283是的,最好使它们独立于应用程序,它可以为您将来使用生成功能的每个项目节省工作。@bruno desthuilliers:class:因为类可以被视为一组自包含的功能,在本例中:字典(实用程序)和文件(实用程序)。静态,因为您不希望创建实例来调用函数。。。请参阅实用程序类(设计模式)。感谢您的反馈。我也会将此标记为可接受的答案,只是将上述标记为可接受的答案,因为这是第一个回答。非常感谢。