Выпуск Python 3.8
Python 3.8 (выпущен 14 октября 2019) — версия, которая сделала код заметно компактнее и удобнее, добавив новые синтаксические возможности и улучшив интерпретатор.
Моржовый оператор (Assignment expressions :=)
Главная звезда релиза — PEP 572, он же "морж".
Позволяет присвоить значение прямо внутри выражения:
import re
if match := re.search(r'паттерн', "Поиск паттерна"):
print(match.group(0))
- Убирает дублирование вычислений
- Делает код короче
- Особенно полезен в
whileи comprehension’ах ([Python documentation][1])
while (chunk := file.read(1024)) != b"":
process(chunk)
Строго позиционные аргументы (/)
PEP 570 добавил новый синтаксис:
def calculate(a, b, /, op="add"):
pass
- Аргументы до
/можно передавать только по позиции - Нельзя писать
a=... - Делает API чище и стабильнее ([Python documentation][1])
Улучшения f-строк (debug syntax)
Теперь можно быстро дебажить переменные:
value = 42
print(f"{value=}")
# value=42
- Выводит и имя переменной, и значение
- Удобно для быстрого логирования
Новые возможности стандартной библиотеки
math.prod()— произведение элементовmath.isqrt()— точный целочисленный кореньmath.comb()иmath.perm()— комбинаторикаimportlib.metadata— информация о пакетахmultiprocessing.shared_memory— общая память между процессами ([Python documentation][2])
Производительность и интерпретатор
- Оптимизации CPython
- Улучшенная работа памяти
- Быстрее вызовы функций (vectorcall groundwork)
Устаревшие изменения
- Подготовка к удалению старых API
- Очистка стандартной библиотеки в будущих версиях
История патчей (Subversions)
- 3.8.19 (Март 2024) — финальные обновления безопасности
- 3.8.10 (Май 2021) — последний bugfix-релиз
- 3.8.3 (Май 2020) — исправления asyncio и памяти
- 3.8.0 (Окт 2019) — первоначальный релиз