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(), которую можно переопределить для управления тем, как обрабатываются «невозбудимые исключения» |
|