python - 所有的命名元组都应该在一个单独的文件中吗?

标签 python python-2.7 code-organization namedtuple

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

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

最佳答案

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

  • 模块定义功能的逻辑单元。某些代码段可能永远不需要了解另一段代码或与之交互。这些边界线的标识强烈提示了在哪里将代码分解为模块。

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

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

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

但是,如果 X 无论如何都需要导入 Y,那么将命名元组放在单独的模块中实际上不会有太大区别,因为到处都是你import Y你也import Z

现在,X 并不需要 所有 Y 提供的功能,这很常见,因此您可能会想将 X 需要的较小部分分离到一个单独的模块中。但是在某一点之后,一点一点地分解成它自己的模块是疯狂的——拥有许多小模块而不是一个中型模块会变得更加繁重。这条线在哪里——究竟什么是中等大小——取决于品味和您设想的功能逻辑单元。

关于python - 所有的命名元组都应该在一个单独的文件中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25395229/

相关文章:

python - python 中的等高线图

python - 在 python 中返回 1 而不是 true

ruby-on-rails - 如何在rails 4中组织 Controller 目录而不会弄乱路由

javascript - Visual Studio 中 CSS/javascript 的 Vim 样式折叠

python - 在Python2.7中导入错误但在Python3中没有

python - 复制并合并两个数据框 pandas

python - 在 Python 中将终端置于前端

python - IPython autoreload 为重复调用 Python2 super() 提供错误

python - 使用 else pass 的列表理解

php - 在 Codeigniter 中放在哪里以及如何加载结果对象类?