Kjj*_*ssy 35 python django python-2.7 python-3.x django-1.9
我有点好奇知道为什么Django 1.9用设置,URL和其他配置文件中的lists []替换了元组()
我刚升级到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'),
]
Run Code Online (Sandbox Code Playgroud)
urls.py
urlpatterns = [
url(r'^', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
这些变化有什么不同吗?
Sel*_*cuk 54
问题#8846(强调我的)解释:
在创建您自己的设置的文档中,有一条建议显示"对于序列设置,使用元组而不是列表.这纯粹是为了提高性能."
这是铺位.分析表明元组的运行速度并不比大多数操作的列表快(当然循环,我们可能最常做).另一方面,list-literal语法的优点是,当您有一个项目并且省略尾随逗号(如元组语法)时,它不会折叠为单个值.使用列表语法不会更慢,更清晰,更不容易出错.在更广泛的Python社区中经常表达的观点似乎不应将元组视为不可变列表.它们用作固定长度的记录 - 实际上元组的数学概念与序列的数学概念完全不同.
另请参阅此答案以获取更新的讨论.
另一个答案(与此问题没有直接关系)表明访问元素实际上更快list.
更新和进一步的信息:上述问题在几年前就已经结束是正确的,但我把它包括在内是因为它解释了决定背后的理由,许多类似的讨论都提到了同一张票.实际的实现决定是在以下关于 Django开发者Aymeric Augustin开始的django-developers的讨论之后触发的:
我更喜欢它们[列表]有两个原因:
1)所有这些设置都是类似事物的序列.这些值最好用列表表示,除非它们必须是不可变的,在这种情况下可以使用元组.(元组在Python中都是"没有名字的命名元组"和"不可变列表".)
2)列表不容易出现"单项元组中缺少逗号"的问题,这些问题会引发初学者和经验丰富的pythonistas.Django甚至还有一些代码来防御这个错误,以防止一些设置.在源中搜索"tuple_settings".
切换到列表实际上发生在问题#24149中,这也引用了上述讨论.
| 归档时间: |
|
| 查看次数: |
2290 次 |
| 最近记录: |