Релиз языка Python 3.9 что нового

python 3.9 что нового
Метки: /

Наконец вышел новый релиз языка программирования Python 3.9, и в этой статье мы увидим что нового появилось в нём.

Этот релиз готовился год, и это первый выпуск после объявления о переходе на новый цикл обновлений, теперь новая версия Python выпускаться через год, а не через полтора, как было раньше.

Что нового в Python 3.9:

  • В словарях, определённых при помощи встроенного класса dict, появилась поддержка операторов слияния «|» и обновления «|=», которые дополняют методы {**d1, **d2} и dict.update, ранее предлагавшиеся для объединения словарей.
  • Во встроенную коллекцию типов включены list, dict и tuple, которые можно использовать как базовые типы без импорта из модуля typing. Т.е. вместо typing.List, typing.Dict и typing.Tuple теперь можно указывать просто list, dict и tuple:
  • Предоставлены гибкие средства для аннотирования функций и переменных. Для прикрепления аннотаций в модуль typing добавлен новый тип Annotated, расширяющий существующие типы дополнительными метаданными, которые могут использоваться при статическом анализе или для оптимизаций во время выполнения. Для доступа к метаданным из кода в метод typing.get_type_hints() добавлен параметр include_extras.
  • Смягчены грамматические требования к декораторам — любое выражение, подходящее для использование в блоках if и while, теперь может быть использовано как декоратор. Изменение позволило заметно улучшить читаемость кода PyQt5 и упростить сопровождение данного модуля:
  • В стандартную библиотеку добавлен модуль zoneinfo, включающий информацию из базы часовых поясов IANA.
  • Добавлен модуль graphlib, в котором реализована поддержка топологической сортировки графов.
  • Предложены новые методы для удаления префиксов и окончаний строк — str.removeprefix(prefix) и str.removesuffix(suffix). Методы добавлены в объекты str, bytes, bytearray и collections.UserString.
  • Задействован новый парсер PEG (Parsing Expression Grammar), который пришёл на смену парсеру LL(1). Применение нового парсера позволило избавиться от некоторых «хаков», используемых для обхода ограничений в LL(1), и существенно снизило трудозатраты на сопровождение парсера. По производительности новый парсер находится примерно на одном уровне с прошлым, но значительно опережает его в плане гибкости, что позволяет более свободно чувствовать себя при проектировании новых возможностей языка. Код старого парсера пока сохранён и может быть возвращён при помощи флага «-X oldparser» или переменной окружения «PYTHONOLDPARSER=1», но будет удалён в выпуске 3.10.
  • Предоставлена возможность доступа методов Си-расширений к состоянию модулей, в которых они определены, с применением прямого разыменования указателей вместо поиска состояния модуля при помощи функции PyState_FindModule. Изменение позволяет повысить производительность модулей на Си за счёт снижения или полного исключения накладных расходов на проверку состояния модуля. Для ассоциирования модуля с классом предложена Си-функция PyType_FromModuleAndSpec(), для получения модуля и его состояния Си-функции PyType_GetModule() и PyType_GetModuleState(), а для предоставления методу доступа к классу, в котором он определён, Си-функция PyCMethod и флаг METH_METHOD.
  • Сборщик мусора избавлен от блокировки коллекций, включающих реанимированные объекты, которые остаются доступными извне после запуска финализатора.
  • Добавлен метод os.pidfd_open, позволяющий использовать подсистему ядра Linux «pidfd» для обработки ситуации с повторным использованием PID (pidfd связывается с конкретным процессом и не меняется, в то время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID).
  • Поддержка спецификации Unicode обновлена до версии 13.0.0.
  • Устранена утечка памяти при повторной инициализации интерпретатора Python в одном процессе.
  • Проведена оптимизация производительности встроенных типов range, tuple, set, frozenset, list и dict, реализованная за счёт применения протокола быстрого вызова Vectorcall для более быстрого обращения к объектам, написанным на языке Си.
  • Модули _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time и _weakref переведены на загрузку с инициализацией в несколько стадий.
  • Модули стандартной библиотеки audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios и zlib переведены на использование ограниченного стабильного ABI, который решает проблему работоспособности сборок модулей-расширений для разных версий Python (при обновлении версии не требуется пересобирать модули-расширения, т.е. модули собранные для 3.9, смогут работать в ветке 3.10).
  • В модуле asyncio из-за потенциальных проблем с безопасностью прекращена поддержка параметра reuse_address (использование SO_REUSEADDR для UDP в Linux позволяет разным процессам прикреплять слушающие сокеты к UDP-порту).
  • Добавлены новые оптимизации, например, повышена производительность обработчиков сигналов в многопоточных приложениях, повышена скорость работы модуля subprocess в окружении FreeBSD и ускорено присвоение временных переменных (назначение переменной в выражении for y in [expr] теперь не уступает по производительности выражению y = expr). В целом большинство тестов показывают снижение производительности по сравнению с веткой 3.8 (ускорение наблюдается только в тестах write_local и write_deque):
  • Удалены многие функции и методы Python 2.7, которые ранее были отмечены устаревшими и в прошлом выпуске приводили к выводу предупреждения «DeprecationWarning», включая метод unescape() в html.parser.HTMLParser, tostring() и fromstring() в array.array, isAlive() в threading.Thread, getchildren() и getiterator() в ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() и base64.decodestring().

Вывод:

Здесь вы прочитали что нового в новом релизе языка программирования Python 3.9, думаю вам было очень интересно.

Источник: OpenNet.

Подписываетесь на соц-сети:

Оценка:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
(Пока оценок нет)
Загрузка...

Поделится:

Также рекомендую:

55058653