3

namedtuple在我的 Python 代码库中使用了很多 s,它们散落在所有.py文件中。将所有这些声明提取到单独的文件中是一种好习惯,还是应该将它们保留在使用它们的地方?

在少数情况下,其他模块需要namedtuples在单独的模块中使用引用,因为这是定义接口的方式 - 他们期望namedtuples. 组织各种namedtuples特别是跨模块引用的推荐 Pythonic 方式是什么?

4

1 回答 1

4

用于决定将命名元组放置在何处的思考过程与用于任何其他代码行的思考过程没有什么不同:

  • 模块定义了功能的逻辑单元。某些代码段可能永远不需要了解另一段代码或与另一段代码交互。这些边界线的识别是在何处将代码分解为模块的有力提示。

  • 模块封装了一个接口。它们使您有机会定义一个 API,所有其他代码片段通过该 API 进行交互,同时隔离模块中其实现的细节。当您想在保留 API 的同时更改实现时,在模块中隔离代码可以更轻松地了解您的注意力集中在哪里。

一旦您确定了逻辑单元(即模块)和逻辑单元将通过其交互的 API,应该更清楚放置命名元组的位置。

如果一个模块X需要导入另一个模块,Y除了命名元组的定义之外没有其他原因,那么将命名元组放在一个单独的模块中可能是有意义的Z,因为您已经找到了一条边界线。

但是,如果无论如何X都需要导入Y,那么如果将命名元组放在一个单独的模块中,那真的不会有太大的区别,因为无论你在哪里,import Y你也是import Z.

现在,通常情况下X不需要提供的所有功能Y,因此您可能很想将X需要的较小部分分离到单独的模块中。但是在某个点之后,将每一点都分解成自己的模块是很疯狂的——拥有很多小模块而不是一个中等大小的模块变得更加繁重。这条线在哪里——确切地说是中型线——是一个品味问题,以及你设想的功能逻辑单元。

于 2014-08-20T02:19:23.900 回答