Выпуск Python 3.7
Python 3.7 (выпущен 27 июня 2018) стал одной из самых важных версий современного Python. Он принёс удобные абстракции, улучшил отладку и закрепил ключевые поведенческие особенности языка.
Датаклассы (@dataclass)
Главная фича версии — PEP 557 (dataclasses).
Теперь можно создавать классы для хранения данных без лишнего boilerplate-кода:
from dataclasses import dataclass
@dataclass
class User:
username: str
is_admin: bool = False
Python автоматически генерирует:
__init____repr____eq__
Это делает код чище и ближе к "структурам данных" из других языков.
Гарантированный порядок словарей
Начиная с Python 3.7, поведение dict стало официальной частью языка:
порядок вставки элементов теперь гарантирован
data = {}
data["a"] = 1
data["b"] = 2
data["c"] = 3
print(list(data.keys()))
# ['a', 'b', 'c']
Это было реализовано раньше как оптимизация, но в 3.7 стало спецификацией языка.
Встроенный дебаггер (breakpoint())
PEP 553 добавил новую встроенную функцию:
breakpoint()
Она заменяет:
import pdb; pdb.set_trace()
Особенности:
- можно переопределить через
PYTHONBREAKPOINT - работает с любым дебаггером
Контекстные переменные (contextvars)
PEP 567 добавил поддержку контекстных переменных для async-кода:
- безопасная работа с async/await
- альтернатива thread-local storage
Улучшения типизации
typingстал более интегрированным в ядро Python- поддержка generic типов на уровне интерпретатора (PEP 560)
- улучшения для статической проверки кода
Новые возможности стандартной библиотеки
contextvars— управление контекстом выполненияimportlib.resources— работа с ресурсами пакетов- улучшения
asyncio
Улучшения интерпретатора
- быстрее импорт модулей
- улучшения GC
- оптимизации выполнения async-кода
- новая система инициализации C-расширений
Изменения в языке
asyncиawaitстали зарезервированными ключевыми словами- улучшена работа с предупреждениями
- добавлены более строгие правила для будущих изменений языка
История патчей (Subversions)
- 3.7.17 (Июнь 2023) — финальный security-релиз (EOL)
- 3.7.16 (2022) — исправления безопасности
- 3.7.10 (Май 2021) — критические security fixes
- 3.7.0 (Июнь 2018) — первый стабильный релиз