我有一个很小的Python程序,由很少的模块组成(大约4个左右)。主模块创建一个元组列表,从而表示多个记录。这些元组可以通过一个简单的函数返回给其他模块(比如,get_records()
)。在
但我不确定这是否是一个好的设计。问题是其他模块需要知道元组中每个元素的索引。这增加了模块之间的耦合,对于想要使用主模块的人来说不是很透明。
我可以想出几个备选方案:
使元组元素的索引值可用作模块常量(例如,IDX_RECORD_TITLE
,IDX_RECORD_STARTDATE
,等等)。这避免了像title = record[3]
这样的幻数。
不要使用元组,而是创建一个record类,并返回这些类对象的列表。这样做的好处是类方法将具有自我解释的名称,如record.get_title()
。
不要使用元组,而是使用字典。所以在这个场景中,函数将返回一个字典列表。其优点是字典键也是自解释的(尽管使用该模块的人需要知道它们)。但这似乎是一个巨大的开销。
我发现元组是Python的强项之一(非常容易传递复合数据,而不需要类/对象的编码开销),因此我目前使用(1),但仍然想知道什么是最好的方法。在
在这种情况下,我倾向于使用字典。 如果我晚一点回来使用代码时,能让自己容易理解就好了。在
我不知道这是否是“巨大的开销”。我想这取决于你多久做一次,它是用来做什么的。我从最简单的解决方案开始,并在需要时进行优化。令人惊讶的是,我很少需要改变这样的事情。在
http://docs.python.org/library/collections.html#namedtuple-factory-function-for-tuples-with-named-fields
我看不出在元组上传递对象有任何开销或复杂性(元组也是对象)
IMO如果tuple能满足您的需要,那么就很容易地使用它,但是正如您所看到的,只需切换到一个干净地表示您的数据的类,例如
不需要添加任何getter或setter方法。在
相关问题 更多 >
编程相关推荐