命名元组应该放在单独的文件中吗?
我在我的Python代码中使用了很多namedtuple
,到处都是.py
文件里都有。把这些定义提取到一个单独的文件里是个好主意吗?还是说它们应该留在使用的地方?
在一些情况下,其他模块需要引用这些namedtuple
,因为接口就是这样定义的——它们需要namedtuple
。对于跨模块引用,推荐的Python风格是什么样的组织方式呢?
1 个回答
5
决定在哪里放置命名元组的思路和你写其他代码时的思路是一样的:
模块定义了功能的逻辑单元。有些代码片段可能根本不需要知道或与其他代码片段互动。找出这些边界线可以帮助你决定如何把代码拆分成模块。
模块封装了接口。它们让你有机会定义一个API,通过这个API,所有其他代码片段可以进行交互,同时把具体的实现细节隐藏在模块里。把代码放在模块里,可以让你在想要改变实现时,更容易找到关注的重点,同时保持API不变。
一旦你找到了逻辑单元(也就是模块)和它们之间的API,放置命名元组的位置就会变得更清晰。
如果模块X
需要引入另一个模块Y
,仅仅是为了定义命名元组,那么把命名元组放在一个单独的模块Z
里是有道理的,因为你找到了一个边界线。
但是,如果X
本来就需要引入Y
,那么把命名元组放在一个单独的模块就没什么区别了,因为每次你import Y
的时候,也会同时import Z
。
通常情况下,X
并不需要Y
提供的所有功能,所以你可能会想把X
需要的那部分功能拆分到一个单独的模块里。但如果把每一小部分都拆成自己的模块,那就太疯狂了——有太多小模块反而比一个中等大小的模块更麻烦。到底什么算是中等大小,这就看个人的喜好和你对功能逻辑单元的理解了。