Python 3.8¶
Python 3.8.0 (финальная версия) был выпущен 14 октября 2019 года. Возможности версии 3.8 определены в PEP 569, а подробное описание изменений можно найти в What’s New in Python 3.8.
Возможности | Статус | |
Только позиционные аргументы | ||
Выражения присваивания | Завершено | |
Протокол pickle 5 с внеполосными данными | ||
Хуки аудита времени выполнения | ||
Конфигурация инициализации Python | ||
Vectorcall: быстрый протокол вызова для CPython | ||
Разное | ||
f-строки поддерживают = для самодокументирующихся выражений и отладки | Завершено | |
Прочие изменения языка:
Инструкция continue была недопустима в блоке finally из-за проблемы в реализации. В Python 3.8 это ограничение было снято | Завершено |
Типы bool, int и fractions.Fraction теперь имеют метод as_integer_ratio(), как у float и decimal.Decimal | |
Конструкторы int, float и complex теперь будут использовать специальный метод __index__(), если он доступен, а соответствующий метод __int__(), __float__() или __complex__() недоступен | |
Добавлена поддержка экранирования N{name} в регулярных выражениях | |
Dict и dictviews теперь можно итерировать в обратном порядке вставки с помощью reversed() | |
Синтаксис, допустимый для имён именованных аргументов в вызовах функций, был дополнительно ограничен. В частности, f((keyword)=arg) больше не допускается | |
Обобщённая распаковка итерируемых объектов в инструкциях yield и return больше не требует охватывающих скобок | |
Когда в коде вроде [(10, 20) (30, 40)] пропущена запятая, компилятор отображает SyntaxWarning с полезной подсказкой | |
Арифметические операции между подклассами datetime.date или datetime.datetime и объектами datetime.timedelta теперь возвращают экземпляр подкласса, а не базового класса | |
Когда интерпретатор Python прерывается Ctrl-C (SIGINT) и возникающее исключение KeyboardInterrupt не перехватывается, процесс Python теперь завершается через сигнал SIGINT или с корректным кодом выхода, так что вызывающий процесс может определить, что он завершился из-за Ctrl-C | |
Некоторые продвинутые стили программирования требуют обновления объекта types.CodeType для существующей функции | |
Для целых чисел трёхаргументная форма функции pow() теперь допускает отрицательный показатель степени в случае, когда основание взаимно просто с модулем | |
Включения словарей были согласованы с литералами словарей, так что сначала вычисляется ключ, а затем значение | |
Метод object.__reduce__() теперь может возвращать кортеж длиной от двух до шести элементов |
Изменения во встроенных модулях:
asyncio.run() перешёл из предварительного в стабильный API | Завершено |
Запуск python -m asyncio запускает нативно асинхронный REPL | |
Исключение asyncio.CancelledError теперь наследуется от BaseException, а не от Exception, и больше не наследуется от concurrent.futures.CancelledError | Завершено |
Добавлен asyncio.Task.get_coro() для получения обёрнутой корутины внутри asyncio.Task | |
Задачи asyncio теперь можно именовать, передавая именованный аргумент name в asyncio.create_task() или метод цикла событий create_task(), либо вызывая метод set_name() у объекта задачи | |
Добавлена поддержка Happy Eyeballs в asyncio.loop.create_connection(). Для задания поведения были добавлены два новых параметра: happy_eyeballs_delay и interleave. | |
get_objects() теперь может принимать необязательный параметр generation, указывающий поколение, из которого нужно получить объекты. (Однако обратите внимание, что хотя gc является встроенным, get_objects() не реализован для MicroPython) | |
Добавлена новая функция math.dist() для вычисления евклидова расстояния между двумя точками | |
Расширена функция math.hypot() для обработки нескольких измерений | |
Добавлена новая функция math.prod() как аналог sum(), которая возвращает произведение «начального» значения (по умолчанию: 1) на итерируемый набор чисел | |
Добавлены две новые комбинаторные функции math.perm() и math.comb() | |
Добавлена новая функция math.isqrt() для вычисления точных целочисленных квадратных корней без преобразования в число с плавающей точкой | |
Функция math.factorial() больше не принимает аргументы, не являющиеся int-подобными | Завершено |
Добавлена новая функция sys.unraisablehook(), которую можно переопределить для управления тем, как обрабатываются «невозбудимые исключения» | |