Почему Django 1.9 заменил кортежи () списками в настройках и URL-адресах?

Мне любопытно узнать, почему Django 1.9 заменил tuples () на списки [] в настройках, 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'), ] 

urls.py

 urlpatterns = [ url(r'^', admin.site.urls), ] 

Из-за этих изменений что-то другое?

2 Solutions collect form web for “Почему Django 1.9 заменил кортежи () списками в настройках и URL-адресах?”

Это объясняется в выпуске № 8846 (акцент мой):

В документации для создания собственных настроек есть рекомендация, которая гласит: «Для параметров, которые являются последовательностями, используйте кортежи вместо списков. Это чисто для производительности».

Это койка. Профилирование показывает, что кортежи выполняются не быстрее, чем списки для большинства операций (конечно, цикл, который мы чаще всего будем делать). С другой стороны, синтаксис list-literal имеет то преимущество, что он не сворачивается до одного значения, когда у вас есть один элемент и опускает конечную запятую, например синтаксис кортежа. Использование синтаксиса списка не является более медленным, более разборчивым и менее подверженным ошибкам. Часто выраженный взгляд в более широком сообществе Python кажется, что кортежи не следует рассматривать как непреложные списки. Они предназначены для записи фиксированной длины – действительно, математическая концепция кортежа совершенно отличается от математической концепции последовательности.

Также см. Этот ответ для более актуального обсуждения.

Другой ответ (не связанный напрямую с этой проблемой) показывает, что доступ к элементам происходит быстрее с помощью list .

Обновление и дальнейшая информация: правильно, что вышеупомянутый вопрос был закрыт много лет назад, но я включил его, потому что он объяснил обоснование решения, и многие подобные обсуждения относятся к одному и тому же билету. Фактическое решение о внедрении было инициировано после обсуждения django-разработчиков, начатого разработчиком ядра Django Aymeric Augustin :

Я предпочитаю их [списки] по двум причинам:

1) Все эти настройки – это последовательности похожих вещей. Такие значения лучше всего представлены в списках, если только они не должны быть неизменными, и в этом случае может использоваться кортеж. (кортежи – это именованные имена без имен) и «неизменяемые списки» в Python.)

2) Списки не подвержены проблеме «недостающей запятой в одном элементе», которая кусает новичков и опытных питонистов. Django даже имеет код для защиты от этой ошибки для нескольких настроек. Найдите «источник tuple_settings» в источнике.

И переход к спискам фактически произошел в выпуске # 24149, который также ссылался на вышеупомянутое обсуждение.

В примечаниях к выпуску 1.9 , есть:

Настройки по умолчанию, которые были кортежами, теперь перечислены

Настройки по умолчанию в django.conf.global_settings были комбинацией списков и кортежей. Все настройки, которые раньше были кортежами, теперь перечислены.

Похоже, что это было сделано только для согласованности. Оба кортежа и списки должны работать нормально. Если вы используете кортеж с 1 элементом, помните запятую (1,) потому что иначе это не кортеж, а просто выражение в parens.

Что касается urlpatterns, те были определены с помощью функции pattern patterns() , но это было устарело в Django 1.8, так как список экземпляров url отлично работает. Поскольку функция будет удалена в будущем, ее нельзя использовать в новых приложениях и проектах.

  • Получить имена столбцов Excel-стиля из номера столбца
  • Python 2.7 - IPython «raw_input» и добавление к списку - добавляет «u» перед каждым элементом
  • ImportError: нет модуля с именем pxssh
  • как организовать файлы с помощью python27 app engine webapp2 framework
  • Pycharm: как запустить стандартный терминал (для решения проблемы с проклятиями)
  • Тайм-аут на вызов функции Python внутри timeit
  • Как обрабатывать зависимость от scipy в setup.py
  • Значение '\ 0 \ 0' в Python?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.