为什么Django使用元组设置而不是列表?

时间:2012-09-10 10:27:09

标签: python django list tuples semantics

引用this answer

除了元组是不可变的之外,还有一个语义上的区别应该指导它们的使用。元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同构序列。元组有结构,列表有顺序。

这对我有意义。但是为什么Django使用元组而不是列表进行设置?例如:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

这个(以及所有其他设置)在语义上是不是一个完美的案例?

2 个答案:

答案 0 :(得分:10)

基于user1474837对这个问题的Django ticket的有用链接,似乎很明显,元组用于向后兼容设置从一开始就完成的方式,这与元组有关,因为他们相信它们更快比列表。 (根据票证讨论中引用的数据,它们是,但只是非常轻微。)

具体来说,Django文档曾经说过:

  

对于序列设置,请使用元组而不是列表。这纯粹是为了表现。

稍后在讨论中,Django核心开发人员指出:

  

我们肯定不会从元组转移到那里的列表,因为它会破坏已经预期会成为元组的现有代码。不过,我会删除效果说明,因为它不值得吓唬人。

请注意原始文档中的“纯粹”一词 - 如果采用面值,则表示设置是不可变的是使用元组的原因。另请注意,故障单讨论中的某些人将设置称为“排序”不可变,因此甚至不清楚设置实际上是不可变的。

P.S。如有兴趣,请注意票证解决方案以:

结束
  

更改了“编写自己的设置”建议,提到Django   使用元组,但不是建议。这可能会让人无穷无尽   元组与列表辩论。

答案 1 :(得分:2)

我认为原因部分是元组是只读的,它更安全,更适合设置。