命名元组应该放在单独的文件中吗?

3 投票
1 回答
1078 浏览
提问于 2025-04-18 17:52

我在我的Python代码中使用了很多namedtuple,到处都是.py文件里都有。把这些定义提取到一个单独的文件里是个好主意吗?还是说它们应该留在使用的地方?

在一些情况下,其他模块需要引用这些namedtuple,因为接口就是这样定义的——它们需要namedtuple。对于跨模块引用,推荐的Python风格是什么样的组织方式呢?

1 个回答

5

决定在哪里放置命名元组的思路和你写其他代码时的思路是一样的:

  • 模块定义了功能的逻辑单元。有些代码片段可能根本不需要知道或与其他代码片段互动。找出这些边界线可以帮助你决定如何把代码拆分成模块。

  • 模块封装了接口。它们让你有机会定义一个API,通过这个API,所有其他代码片段可以进行交互,同时把具体的实现细节隐藏在模块里。把代码放在模块里,可以让你在想要改变实现时,更容易找到关注的重点,同时保持API不变。

一旦你找到了逻辑单元(也就是模块)和它们之间的API,放置命名元组的位置就会变得更清晰。

如果模块X需要引入另一个模块Y,仅仅是为了定义命名元组,那么把命名元组放在一个单独的模块Z里是有道理的,因为你找到了一个边界线。

但是,如果X本来就需要引入Y,那么把命名元组放在一个单独的模块就没什么区别了,因为每次你import Y的时候,也会同时import Z

通常情况下,X并不需要Y提供的所有功能,所以你可能会想把X需要的那部分功能拆分到一个单独的模块里。但如果把每一小部分都拆成自己的模块,那就太疯狂了——有太多小模块反而比一个中等大小的模块更麻烦。到底什么算是中等大小,这就看个人的喜好和你对功能逻辑单元的理解了。

撰写回答