在Python模块之间交换元组是否可以?

时间:2010-07-06 06:50:57

标签: python tuples coupling

我有一个由很少的模块组成的小型Python程序(大约4个左右)。主模块创建一个元组列表,从而表示许多记录。这些元组通过一个返回它们的简单函数(例如get_records())可供其他模块使用。

我不确定这是不是很好的设计。问题是其他模块需要知道元组中每个元素的索引。这增加了模块之间的耦合,对于想要使用主模块的人来说不是很透明。

我可以想到几个选择:

  1. 使元组元素的索引值可用作模块常量(例如IDX_RECORD_TITLEIDX_RECORD_STARTDATE等)。这避免了需要像title = record[3]这样的幻数。

  2. 不要使用元组,而是创建一个记录类,并返回这些类对象的列表。优点是类方法将具有自我解释的名称,如record.get_title()

  3. 不要使用元组,而是使用字典。所以在这种情况下,该函数将返回一个字典列表。优点是字典键也是不言自明的(尽管使用该模块的人需要知道它们)。但这似乎是一个巨大的开销。

  4. 我发现元组是Python的强大功能之一(很容易在没有类/对象的编码开销的情况下传递复合数据),所以我目前使用(1),但仍然想知道什么是最好的方法

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

我没有看到在元组上传递对象的任何开销或复杂性(元组也是对象)

IMO如果元组服务于你的目的很容易使用它,但正如你所看到的那样,约束只是切换到一个代表你的数据的类,例如。

class MyData(object):
    def __init__(self, title, desc):
        self.title = title
        self.desc = desc

您无需添加任何getter或setter方法。

答案 2 :(得分:0)

在这些情况下,我倾向于使用词典。 如果我稍后回来使用代码时,只为自己容易理解。

我不知道这是否是“巨大的开销”。我想这取决于你做多少次以及它用于什么。我从最简单的解决方案开始,并在我真正需要的时候进行优化。令人惊讶的是,我很少需要改变这样的东西。