Sau một năm rưỡi phát triển trình bày значительный релиз языка программирования Python 3.8. Корректирующие обновления для ветки Python 3.8 đã lên kế hoạch выпускать в течение 18 месяцев. Критические уязвимости будут исправляться 5 лет до октября 2024 года. Корректирующие обновления для ветки 3.8 будут выходить раз в два месяца, на декабрь намечен первый корректирующий релиз Python 3.8.1.
Hỗ trợ операций присвоения внутри сложных выражений. При помощи нового оператора «:=» появилась возможность выполнять операции присвоения значений внутри других выражений, например, чтобы избежать двойного вызова функций в условных операторах и при определении циклов:
nếu (n := len(a)) > 10:
...
while (block := f.read(256)) != »:
...
Hỗ trợ нового синтаксиса задания аргументов функции. При перечислении аргументов во время определения функции теперь можно указывать признак «/», позволяющий отделить аргументы, значения которым могут быть присвоены только на основе порядка перечисления значений во время вызова функции, от аргументов, допускающих присвоение в произвольном порядке (синтаксис «переменная=значение»). С практической стороны новая возможность позволяет в функциях на языке Python полностью эмулировать поведение существующих функций на языке Си, а также избежать привязок к конкретным именам, например, если имя параметра планируется изменить в будущем.
Флаг «/» дополняет собой ранее добавленный признак «*», отделяющий переменные, для которых применимо только присвоение в форме «переменная=значение». Например, в функции «def f(a, b, /, c, d, *, e, f):» переменные «a» и «b» могут быть присвоены только в порядке перечисления значений,
переменные «e» и «f», только через присвоение «переменная=значение», а переменные «c» и «d» любым из указанных способов:
Thêm новый Си API
для настройки параметров инициализации Python, позволяющий полностью контролировать всю cấu hình и предоставляющий расширенные средства обработки ошибок. Предложенный API упрощает встраивание функциональности интерпретатора Python в другие приложения на языке Си;
thực hiện новый протокол Vectorcall для более быстрого обращения к объектам, написанным на языке Си. В CPython 3.8 доступ к Vectorcall пока ограничен внутренним использованием, перевод в разряд публично доступных API намечен в CPython 3.9;
Thêm вызовы Runtime Audit Hooks, предоставляющие приложениям и фреймворкам на языке Python доступ к низкоуровневой информации о ходе выполнения скрипта для проведения аудита выполняемых действий (например, можно отследить импорт модулей, открытие файлов, использовании трассировки, обращения к сетевым сокетам, запуск кода через exec, eval и run_mod);
Trong mô-đun dưa chuabảo đảm поддержка протокола Pickle 5, используемого для сериализации и десериализации объектов. Pickle позволяет оптимизировать передачу больших объёмов данных между процессами Python в многоядерных и многоузловых конфигурациях, сократив число операций копирования памяти и применяя дополнительные техники оптимизации, такие как задействование специфичных для определённых данных алгоритмов сжатия. Пятая версия протокола примечательна добавлением режима отделённой передачи (out-of-band), при которого данные могут передаваться отдельно от основного потока pickle.
По умолчанию активирована четвёртая версия протокола Pickle, которая по сравнению с ранее предлагавшейся по умолчанию третьей версией позволяет добиться более высокой производительности и сокращения размера передаваемых данных;
Trong mô-đun gõ представлено несколько новых возможностей:
lớp TypedDict для ассоциативных массивов, в которых для связываемых с ключами данных явно задаётся информация о типе («TypedDict(‘Point2D’, x=int, y=int, label=str)»).
Loại Nghĩa đen, позволяющий ограничить параметр или возвращаемое значение несколькими предопределёнными значениями («Literal[‘connected’, ‘disconnected’]»).
Thiết kế "Cuối cùng«, дающая возможность определить значения переменных, функций, методов и классов, которые не могут быть изменены или переназначены («pi: Final[float] = 3.1415926536»).
Добавлена возможность назначения кэша для скомпилированных файлов с байткодом, сохраняемого в отдельном дереве ФС и отделённого от каталогов с кодом. Путь для сохранения файлов с байткодом задаётся через переменную PYTHONPYCACHEPREFIX или опцию «-X pycache_prefix»;
thực hiện возможность создания отладочных сборок Python, использующих идентичный с релизом ABI, что позволяет в отладочных сборках загружать написанные на языке СИ расширения, собранные для стабильных выпусков;
В f-строках (форматируемые литералы с префиксом ‘f’) обеспечена поддержка оператора «=» (например, «f'{expr=}'»), позволяющего преобразовать выражение в текст для упрощения отладки. Например: