同构数据的Const列表

时间:2014-09-17 08:14:16

标签: python

如何定义命名元组的常量列表?我希望在模块中定义类似的东西,并在我的代码中使用它。然后,当我只对ADULTS感兴趣时,我会使用过滤器。

但是,我不希望其他程序员能够破坏这些数据,如果我使用列表,他们可以这样做。我意识到我可以使用一个元组,但我的理解是有一个事实上的标准,元组用于异构数据,而我实际上有同质数据:

http://jtauber.com/blog/2006/04/15/python_tuples_are_not_just_constant_lists/

如果我正确理解了这篇文章。

human_map = [
   Activity(ADULT, EATING, OFTEN, 5),
   Activity(ADULT, SLEEPING, PERIODIC, 24),
   Activity(BABY, CRYING, OFTEN, 1)]

3 个答案:

答案 0 :(得分:1)

列表和元组都是任意 Python对象。你可以使用一个或另一个:唯一有用的区别是元组是不可变的

Python中只有3种不可变序列:字符串,unicode和元组(在Python 2中),或字符串,元组和字节(在Python 3中)。

因此,如果您需要一个不可变的对象列表,请使用元组。

参考:https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy

答案 1 :(得分:1)

无论您使用哪种方法,都无法阻止开发人员将您的名称human_map引用到完全不同的不可变容器。举个例子:

human_map = (some, immutable, elements,)

然后恶意开发人员执行以下操作:

import humans
humans.human_map = (something, else, entirely,)

在Python的某些时候,你只需要停止担心并且稍微信任模块的客户端。如果人们想要用脚射击自己,那就让他们吧。

答案 2 :(得分:1)

列表和元组可能用于异构数据,但在Python中,将它们用于同类数据没有任何问题。

其他语言提供基本集合(例如C / C ++中的数组),只能 保存同类数据;必须将更复杂的集合用于异构数据,并且在那些语言中,最好的做法是使用更高效的数组来实现同类数据,而不是产生更高级的集合类型的开销。但是这种逻辑适用于Python。