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 по умолчанию всегда построчно буферизован | |
Примечания