Python 为什么Django 1.9在设置和URL中将元组()替换为列表[]?
我有点好奇为什么Django 1.9在设置、URL和其他配置文件中将元组()替换为列表[] 我刚刚升级到Django 1.9,并注意到了这些变化。他们背后的逻辑是什么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
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实例列表可以正常工作。由于该功能将在将来被删除,因此不应在新的应用程序和项目中使用