Python 为什么Django 1.9在设置和URL中将元组()替换为列表[]?

Python 为什么Django 1.9在设置和URL中将元组()替换为列表[]?,python,django,python-3.x,python-2.7,django-1.9,Python,Django,Python 3.x,Python 2.7,Django 1.9,我有点好奇为什么Django 1.9在设置、URL和其他配置文件中将元组()替换为列表[] 我刚刚升级到Django 1.9,并注意到了这些变化。他们背后的逻辑是什么 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messag

我有点好奇为什么Django 1.9在设置、URL和其他配置文件中将元组()替换为列表[]

我刚刚升级到Django 1.9,并注意到了这些变化。他们背后的逻辑是什么

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles'
    ]

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
url.py

urlpatterns = [
    url(r'^', admin.site.urls),
]
这些变化有什么不同吗?

在本期(我的重点)中有解释:

在文档中​创建您自己的设置有一个 建议内容为“对于序列设置,使用 元组而不是列表。这纯粹是为了性能。”

这是铺位。分析表明,元组的运行速度并不比列表快 大多数操作(当然是循环,我们可能会做得最多 经常)。另一方面,列表文字语法的优点是 当您有一个项目和 省略后面的逗号,如元组语法。使用列表语法是不行的 更慢、更清晰、更不容易出错。在 更广泛的Python社区似乎不应该考虑元组 作为不可变的列表。它们实际上是作为固定长度的记录 元组的数学概念与元组的数学概念截然不同 顺序

另请参阅,以了解更为最新的讨论

另一个(与此问题没有直接关系)演示了使用
列表访问元素实际上更快

更新和进一步信息:上述问题在几年前就解决了,这是正确的,但我将其包括在内,因为它解释了该决定背后的理由,许多类似的讨论都涉及同一问题。实际实施决策是在核心Django开发人员启动后触发的:

我更喜欢这些[列表]有两个原因:

1) 所有这些设置都是类似事情的序列。这些价值观是 最好用列表来表示,除非它们必须是不可变的 在这种情况下,可以使用元组。(元组都是“namedtuple”,没有 Python中的“名称”和“不可变列表”。)

2) 列表不容易出现“单一项元组中缺少逗号”的情况 这个问题让初学者和有经验的蟒蛇爱好者都感到头疼。 Django甚至有一些代码来防止这种错误 设置。在源文件中搜索“元组设置”

而切换到列表实际上也发生在上面的讨论中。

在中,有:

元组的默认设置现在是列表

django.conf.global_settings中的默认设置是列表和元组的组合。以前是元组的所有设置现在都是列表

所以看起来这只是为了保持一致性。元组和列表都可以正常工作。如果将元组与1个元素一起使用,请记住逗号
(1,)
,否则它不是元组,而只是parens中的表达式

至于urlpatterns,那些过去是使用
patterns()
函数定义的,但在Django 1.8中不推荐使用,因为url实例列表可以正常工作。由于该功能将在将来被删除,因此不应在新的应用程序和项目中使用