Python 3.9¶
Python 3.9.0 (финальная версия) был выпущен 5 октября 2020 года. Возможности версии 3.9 определены в PEP 596, а подробное описание изменений можно найти в What’s New in Python 3.9
Возможности |
Статус |
|
Быстрый доступ к состоянию модуля из методов типов C-расширений |
Неактуально |
|
Операторы объединения, добавленные в dict |
Завершено [1] |
|
Аннотации типов с обобщениями в стандартных коллекциях |
||
Гибкие аннотации функций и переменных |
||
CPython переходит на годичный цикл выпусков. Вместо годичного — стремление к двухмесячному циклу выпусков |
Неактуально |
|
Смягчение грамматических ограничений на декораторы |
||
База данных часовых поясов IANA теперь присутствует в стандартной библиотеке в модуле zoneinfo |
||
Методы строк для удаления префиксов и суффиксов |
||
CPython теперь использует новый парсер на основе PEG |
Неактуально |
Прочие изменения языка:
__import__() теперь возбуждает ImportError вместо ValueError |
Завершено |
Python теперь получает абсолютный путь к имени файла скрипта, указанному в командной строке (например: python3 script.py): атрибут __file__ модуля __main__ стал абсолютным путём, а не относительным |
|
По умолчанию, для лучшей производительности, аргумент errors проверяется только при первой ошибке кодирования/декодирования, а аргумент encoding иногда игнорируется для пустых строк |
|
«».replace(«», s, n) теперь возвращает s вместо пустой строки для всех ненулевых n. Теперь это согласуется с «».replace(«», s) |
|
Любое допустимое выражение теперь может использоваться в качестве декоратора. Ранее грамматика была гораздо более ограничивающей |
|
Параллельный запуск aclose() / asend() / athrow() теперь запрещён, а ag_running теперь отражает фактический статус выполнения асинхронного генератора |
|
Непредвиденные ошибки при вызове метода __iter__ больше не маскируются TypeError в операторе in и функциях contains(), indexOf() и countOf() модуля operator |
|
Лямбда-выражения без скобок больше не могут быть частью выражения в условии if во включениях и генераторных выражениях |
Изменения во встроенных модулях:
Из-за серьёзных проблем с безопасностью параметр reuse_address функции asyncio.loop.create_datagram_endpoint() больше не поддерживается |
|
Добавлена новая корутина shutdown_default_executor(), которая планирует завершение работы исполнителя по умолчанию и ожидает завершения закрытия ThreadPoolExecutor. Кроме того, asyncio.run() был обновлён для использования новой корутины. |
|
Добавлен asyncio.PidfdChildWatcher — специфичная для Linux реализация наблюдателя за дочерними процессами, которая опрашивает файловые дескрипторы процессов |
|
добавлена новая coroutine asyncio.to_thread() |
|
При отмене задачи из-за тайм-аута asyncio.wait_for() теперь будет ожидать завершения отмены также и в случае, когда тайм-аут <= 0, как это происходит при положительных тайм-аутах |
|
asyncio теперь возбуждает TyperError при вызове несовместимых методов с сокетом ssl.SSLSocket |
|
Сборка мусора не блокируется на воскрешённых объектах |
|
Добавлена новая функция gc.is_finalized() для проверки того, был ли объект финализирован сборщиком мусора |
|
Расширена функция math.gcd() для обработки нескольких аргументов. Ранее она поддерживала только два аргумента |
|
Добавлена math.lcm(): возвращает наименьшее общее кратное указанных аргументов |
|
Добавлена math.nextafter(): возвращает следующее значение с плавающей точкой после x в направлении y |
|
Добавлена math.ulp(): возвращает значение младшего значащего бита числа с плавающей точкой |
|
Открыты доступные специфичные для Linux os.pidfd_open() и os.P_PIDFD |
|
Функция os.unsetenv() теперь также доступна в Windows |
Завершено |
Функции os.putenv() и os.unsetenv() теперь доступны всегда |
Завершено |
Добавлена функция os.waitstatus_to_exitcode(): преобразует статус ожидания в код выхода |
|
Добавлен новый метод random.Random.randbytes: генерирует случайные байты |
|
Добавлен новый атрибут sys.platlibdir: имя специфичного для платформы каталога библиотек |
|
Ранее sys.stderr был блочно-буферизованным в неинтерактивном режиме. Теперь stderr по умолчанию всегда построчно буферизован |
|
Примечания