Там новая версия питона вышла, пошли посмотрим
Почти две недели назад вышла новая версия питончика — 3.14. Хочу осмотреться и выписать интересные изменения в сравнении с версией 3.13. Вообще давно хотел пробежаться по ченжлогу с версии 3.7, которая долго была в строю в качестве основной версии во многих компаниях(и наверняка где-то еще используется, мы вот в начале этого года перешли на 3.11), до текущих свежих версий.
Сразу в прод пускать новую версию мало кто будет(хотя может вы быстро переходите на новые версии, расскажите понравилось или нет), но в конечном итоге либо прыгнем на нее, либо перепрыгнем на более свежую версию, когда придет время. Погнали пробежимся по добавленым фичам.
Из интересного
- Официально можно вырубить GIL. Ребята перешли на вторую фазу проекта по отказу от GIL, в которой можно собрать CPython с флагом —disable-gil. До этого такие билды были эксперементальными, третьим этапом планируется по умолчанию быть дружелюбными к потокам.
- Выкатили эксперементальные сборки интерпретатора с JIT. Бинарники доступны для винды и маков, линуксоиды могли использовать и до сего момента.. В прод крайне не рекомендуют заносить, так как вместо увеличения производительности вы можете поймать наоборот словить даунгред. Сейчас получают как 20% прироста, так и 10% снижения производительности на тестах.
Из полезного
- Добавили новый тип строки template strings(t-строки) для шаблонизации. Такая строка разбивается на статические и «подставляемые» составляющие(те самые фигурные скобки из f-строк), для которых ввели специальный тип Interpolation, а сами t-строки имеют тип Template. Прикольное.
Маленький пример:
from string.templatelib import Interpolation
def lower_upper(template):
"""Render static parts lowercase and interpolations uppercase."""
parts = []
for part in template:
if isinstance(part, Interpolation):
parts.append(str(part.value).upper())
else:
parts.append(part.lower())
return ''.join(parts)
name = 'Wenslydale'
template = t'Mister {name}'
assert lower_upper(template) == 'mister WENSLYDALE'- Добавили cli-команду для просмотра запущенных асинхронных тасок. Вывод похож на вывод команды ps, можно запросить древовидный вид. Однозначно приятное.
- Завезли UUID с 6 по 8 версии в модуль uuid, импрувнули скорость генерации для версии с 3 по 5.
- Теперь интерпретатор более дружелюбно подсказывает, где и как вы накосячили в коде, если находит синтаксическую ошибку.
- В копилку к дружелюбности: сейчас добавили ворнинги при использовании return/break/continue в блоке finally. В будущем планируют падать с ошибкой.
Из забавного
- Теперь группу отлавливаемых исключений в except и в except*(введен в версии 3.11, расскажу о нем в будущем) блоках можно писать без скобочек:
# Было
try:
connect_to_server()
except (TimeoutError, ConnectionRefusedError):
print('The network has ceased to be!')
# Стало
try:
connect_to_server()
except TimeoutError, ConnectionRefusedError:
print('The network has ceased to be!')Лично меня скобочки не смущали, не совсем понял прикола, ну да ладно.
- Интерактивный интерпретатор теперь поддерживает цвета! Когда открывали его в последний раз? Признавайтесь.
- Консольный отладчик теперь можно удаленно натравить на работающий процесс. Им все же кто-то пользуется :)