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

2024-04-19 02:49:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我可以想出几个备选方案:

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

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

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

我发现元组是Python的强项之一(非常容易传递复合数据,而不需要类/对象的编码开销),因此我目前使用(1),但仍然想知道什么是最好的方法。在


Tags: 模块对象方法函数程序元素列表get
3条回答

在这种情况下,我倾向于使用字典。 如果我晚一点回来使用代码时,能让自己容易理解就好了。在

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

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

IMO如果tuple能满足您的需要,那么就很容易地使用它,但是正如您所看到的,只需切换到一个干净地表示您的数据的类,例如

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

不需要添加任何getter或setter方法。在

相关问题 更多 >