Перейти к содержанию

Выпуск языка программирования Python 3.8

Материал из Викиновостей, свободного источника новостей

15 октября 2019 года

После полутора лет разработки представлен значительный релиз языка программирования Python 3.8. Корректирующие обновления для ветки Python 3.8 планируется выпускать в течение 18 месяцев. Критические уязвимости будут исправляться 5 лет до октября 2024 года. Корректирующие обновления для ветки 3.8 будут выходить раз в два месяца, на декабрь намечен первый корректирующий релиз Python 3.8.1.

Среди добавленных новшеств:

  • Поддержка операций присвоения внутри сложных выражений. При помощи нового оператора ":=" появилась возможность выполнять операции присвоения значений внутри других выражений, например, чтобы избежать двойного вызова функций в условных операторах и при определении циклов:

if (n := len(a)) 10:...

while (block := f.read(256)) != '':...

  • Поддержка нового синтаксиса задания аргументов функции. При перечислении аргументов во время определения функции теперь можно указывать признак "/", позволяющий отделить аргументы, значения которым могут быть присвоены только на основе порядка перечисления значений во время вызова функции, от аргументов, допускающих присвоение в произвольном порядке (синтаксис "переменная=значение"). С практической стороны новая возможность позволяет в функциях на языке Python полностью эмулировать поведение существующих функций на языке Си, а также избежать привязок к конкретным именам, например, если имя параметра планируется изменить в будущем.

Флаг "/" дополняет собой ранее добавленный признак "*", отделяющий переменные, для которых применимо только присвоение в форме "переменная=значение". Например, в функции "def f(a, b, /, c, d, *, e, f):" переменные "a" и "b" могут быть присвоены только в порядке перечисления значений, переменные "e" и "f", только через присвоение "переменная=значение", а переменные "c" и "d" любым из указанных способов:


f(10, 20, 30, 40, e=50, f=60)
f(10, 20, с=30, d=40, e=50, f=60)

для настройки параметров инициализации Python, позволяющий полностью контролировать всю конфигурацию и предоставляющий расширенные средства обработки ошибок. Предложенный API упрощает встраивание функциональности интерпретатора Python в другие приложения на языке Си;

  • Реализован новый протокол Vectorcall для более быстрого обращения к объектам, написанным на языке Си. В CPython 3.8 доступ к Vectorcall пока ограничен внутренним использованием, перевод в разряд публично доступных API намечен в CPython 3.9;
  • Добавлены вызовы Runtime Audit Hooks, предоставляющие приложениям и фреймворкам на языке Python доступ к низкоуровневой информации о ходе выполнения скрипта для проведения аудита выполняемых действий (например, можно отследить импорт модулей, открытие файлов, использовании трассировки, обращения к сетевым сокетам, запуск кода через exec, eval и run_mod);
  • В модуле pickle обеспечена поддержка протокола Pickle 5, используемого для сериализации и десериализации объектов. Pickle позволяет оптимизировать передачу больших объёмов данных между процессами Python в многоядерных и многоузловых конфигурациях, сократив число операций копирования памяти и применяя дополнительные техники оптимизации, такие как задействование специфичных для определённых данных алгоритмов сжатия. Пятая версия протокола примечательна добавлением режима отделённой передачи (out-of-band), при которого данные могут передаваться отдельно от основного потока pickle.
  • По умолчанию активирована четвёртая версия протокола Pickle, которая по сравнению с ранее предлагавшейся по умолчанию третьей версией позволяет добиться более высокой производительности и сокращения размера передаваемых данных;
  • В модуле typing представлено несколько новых возможностей:
  • Класс TypedDict для ассоциативных массивов, в которых для связываемых с ключами данных явно задаётся информация о типе ("TypedDict('Point2D', x=int, y=int, label=str)").
  • Тип Literal, позволяющий ограничить параметр или возвращаемое значение несколькими предопределёнными значениями ("Literal['connected', 'disconnected']").
  • Конструкция "Final", дающая возможность определить значения переменных, функций, методов и классов, которые не могут быть изменены или переназначены ("pi: Final[float] = 3.1415926536").
  • Добавлена возможность назначения кэша для скомпилированных файлов с байткодом, сохраняемого в отдельном дереве ФС и отделённого от каталогов с кодом. Путь для сохранения файлов с байткодом задаётся через переменную PYTHONPYCACHEPREFIX или опцию "-X pycache_prefix";
  • Реализована возможность создания отладочных сборок Python, использующих идентичный с релизом ABI, что позволяет в отладочных сборках загружать написанные на языке СИ расширения, собранные для стабильных выпусков;
  • В f-строках (форматируемые литералы с префиксом 'f') обеспечена поддержка оператора "=" (например, "f'{expr=}'"), позволяющего преобразовать выражение в текст для упрощения отладки. Например:

>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Выражение "continue" разрешено использовать внутри блока finally;
  • Добавлен новый модуль multiprocessing.shared_memory, позволяющий использовать сегменты разделяемой памяти в многопроцессных конфигурациях;
  • На платформе Windows реализация asyncio переведена на использование класса ProactorEventLoop;
  • Производительность инструкции LOAD_GLOBAL увеличена примерно на 40% за счёт использования нового механизма кэширования объектного кода.

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Выпуск языка программирования Python 3.8», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.