Документация Python неофициальный перевод

3.7.md

1126 строк · 192.1 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.13/whatsnew/3.7.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Что нового в Python 3.789**Редактор:**1011Elvis Pranskevichus \<[elvis@magic.io](https://python-all.ru/3.13/whatsnew/3.7.html)\>1213В этой статье описываются новые возможности Python 3.7 по сравнению с 3.6. Python 3.7 был выпущен 27 июня 2018 года. Подробности см. в [списке изменений](https://python-all.ru/3.13/whatsnew/changelog.html#changelog).1415## Краткий обзор – Основные моменты выпуска1617Новые синтаксические возможности:1819- [PEP 563](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep563), отложенная оценка аннотаций типов.2021Несовместимые с предыдущими версиями синтаксические изменения:2223- [`async`](https://python-all.ru/3.13/reference/compound_stmts.html#async) и [`await`](https://python-all.ru/3.13/reference/expressions.html#await) теперь зарезервированные ключевые слова.2425Новые модули библиотеки:2627- [`contextvars`](https://python-all.ru/3.13/library/contextvars.html#module-contextvars): [PEP 567 – Контекстные переменные](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep567)28- [`dataclasses`](https://python-all.ru/3.13/library/dataclasses.html#module-dataclasses): [PEP 557 – Классы данных](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep557)29- [importlib.resources](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-importlib-resources)3031Новые встроенные возможности:3233- [PEP 553](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep553), новая функция [`breakpoint()`](https://python-all.ru/3.13/library/functions.html#breakpoint).3435Улучшения модели данных Python:3637- [PEP 562](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep562), настройка доступа к атрибутам модуля.38- [PEP 560](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep560), базовая поддержка модуля typing и обобщённых типов.39- свойство сохранения порядка вставки [dict](https://python-all.ru/3.13/library/stdtypes.html#typesmapping) объектов [было объявлено](https://python-all.ru/3.13/whatsnew/3.7.html) официальной частью спецификации языка Python.4041Значительные улучшения в стандартной библиотеке:4243- Модуль [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) получил новые возможности, значительные [улучшения удобства использования и производительности](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-asyncio).44- Модуль [`time`](https://python-all.ru/3.13/library/time.html#module-time) получил поддержку [функций с разрешением в наносекунды](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep564).4546Улучшения реализации CPython:4748- Отказ от использования ASCII в качестве кодировки текста по умолчанию:4950  - [PEP 538](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep538), принудительное приведение устаревшей локали C51  - [PEP 540](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep540), режим принудительной UTF-8 во время выполнения52- [PEP 552](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep552), детерминированные .pyc-файлы53- [Новый режим разработки Python](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-devmode)54- [PEP 565](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep565), улучшенная обработка [`DeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#DeprecationWarning)5556Улучшения C API:5758- [PEP 539](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep539), новый C API для локальной памяти потоков5960Улучшения документации:6162- [PEP 545](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep545), переводы документации Python63- Новые переводы документации: [японский](https://python-all.ru/3.13/whatsnew/3.7.html), [французский](https://python-all.ru/3.13/whatsnew/3.7.html) и [корейский](https://python-all.ru/3.13/whatsnew/3.7.html).6465Этот выпуск содержит заметные улучшения производительности во многих областях. Раздел [Оптимизации](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-perf) содержит их подробный перечень.6667Список изменений, которые могут повлиять на совместимость с предыдущими версиями Python, приведён в разделе [Переход на Python 3.7](https://python-all.ru/3.13/whatsnew/3.7.html#porting-to-python-37).6869## Новые возможности7071### PEP 563: Отложенное вычисление аннотаций7273Появление аннотаций типов в Python выявило две серьёзные проблемы удобства использования функциональности аннотаций, добавленной в [**PEP 3107**](https://python-all.ru/3.13/whatsnew/3.7.html) и доработанной в [**PEP 526**](https://python-all.ru/3.13/whatsnew/3.7.html):7475- аннотации могли использовать только имена, уже доступные в текущей области видимости, то есть не поддерживали прямые ссылки любого рода; и76- аннотирование исходного кода отрицательно сказывалось на времени запуска программ Python.7778Обе проблемы решаются отложенным вычислением аннотаций. Вместо компиляции кода, который выполняет выражения в аннотациях в момент их определения, компилятор сохраняет аннотацию в строковой форме, эквивалентной AST соответствующего выражения. При необходимости аннотации можно разрешить во время выполнения с помощью [`typing.get_type_hints()`](https://python-all.ru/3.13/library/typing.html#typing.get_type_hints). В обычных случаях, когда это не требуется, хранение аннотаций обходится дешевле (поскольку короткие строки интернируются интерпретатором) и ускоряет запуск.7980С точки зрения удобства, аннотации теперь поддерживают прямые ссылки, что делает следующий синтаксис допустимым:8182```python83class C:84    @classmethod85    def from_string(cls, source: str) -> C:86        ...8788    def validate_b(self, obj: B) -> bool:89        ...9091class B:92    ...93```9495Поскольку это изменение нарушает совместимость, в Python 3.7 новое поведение необходимо включать для каждого модуля отдельно с помощью импорта [`__future__`](https://python-all.ru/3.13/library/__future__.html#module-__future__):9697```python98from __future__ import annotations99```100101В Python 3.10 оно станет поведением по умолчанию.102103> **См. также**104>105> **[**PEP 563**](https://python-all.ru/3.13/whatsnew/3.7.html) – Отложенное вычисление аннотаций**106>107> PEP написан и реализован Лукашем Лангой.108109### PEP 538: Принудительное приведение устаревшей локали C110111Постоянной проблемой в серии Python 3 было определение разумной стратегии по умолчанию для обработки предположения о текстовой кодировке «7-битный ASCII», которое в настоящее время подразумевается использованием локали C или POSIX по умолчанию на платформах, отличных от Windows.112113[**PEP 538**](https://python-all.ru/3.13/whatsnew/3.7.html) обновляет интерфейс командной строки интерпретатора по умолчанию, чтобы автоматически приводить эту локаль к доступной локали на основе UTF-8, как описано в документации новой переменной окружения [`PYTHONCOERCECLOCALE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONCOERCECLOCALE). Автоматическая установка `LC_CTYPE` таким образом означает, что и сам интерпретатор, и C-расширения, учитывающие локаль (такие как [`readline`](https://python-all.ru/3.13/library/readline.html#module-readline)), будут предполагать использование UTF-8 в качестве кодировки текста по умолчанию вместо ASCII.114115Определение поддержки платформы в [**PEP 11**](https://python-all.ru/3.13/whatsnew/3.7.html) также было обновлено, чтобы ограничить полную поддержку обработки текста должным образом настроенными локалями, отличными от ASCII.116117В рамках этого изменения обработчик ошибок по умолчанию для [`stdin`](https://python-all.ru/3.13/library/sys.html#sys.stdin) и [`stdout`](https://python-all.ru/3.13/library/sys.html#sys.stdout) теперь равен `surrogateescape` (вместо `strict`) при использовании любой из определённых целевых локалей приведения (в настоящее время `C.UTF-8`, `C.utf8` и `UTF-8`). Обработчик ошибок по умолчанию для [`stderr`](https://python-all.ru/3.13/library/sys.html#sys.stderr) по-прежнему равен `backslashreplace`, независимо от локали.118119Приведение локали по умолчанию выполняется без вывода сообщений, но для помощи в отладке потенциальных проблем интеграции, связанных с локалью, можно запросить явные предупреждения (выводимые непосредственно в [`stderr`](https://python-all.ru/3.13/library/sys.html#sys.stderr)), установив `PYTHONCOERCECLOCALE=warn`. Эта настройка также заставит среду выполнения Python выдавать предупреждение, если устаревшая локаль C остаётся активной при инициализации основного интерпретатора.120121Хотя принудительное приведение локали из [**PEP 538**](https://python-all.ru/3.13/whatsnew/3.7.html) имеет преимущество, влияя также на модули расширения (например, GNU `readline`) и дочерние процессы (включая те, что выполняют не-Python-приложения и старые версии Python), у него есть недостаток: требуется, чтобы на работающей системе была доступна подходящая целевая локаль. Чтобы лучше справиться со случаем, когда подходящая целевая локаль недоступна (как, например, на RHEL/CentOS 7), Python 3.7 также реализует [PEP 540: Режим принудительной UTF-8 во время выполнения](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep540).122123> **См. также**124>125> **[**PEP 538**](https://python-all.ru/3.13/whatsnew/3.7.html) – Принудительное приведение устаревшей локали C к локали на основе UTF-8**126>127> PEP написан и реализован Ником Когланом.128129### PEP 540: Принудительный режим UTF-8 во время выполнения130131Новые опция командной строки [`-X`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) `utf8` и переменная окружения [`PYTHONUTF8`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONUTF8) позволяют включить [режим UTF-8 в Python](https://python-all.ru/3.13/library/os.html#utf8-mode).132133В режиме UTF-8 CPython игнорирует настройки локали и по умолчанию использует кодировку UTF-8. Обработчики ошибок для потоков [`sys.stdin`](https://python-all.ru/3.13/library/sys.html#sys.stdin) и [`sys.stdout`](https://python-all.ru/3.13/library/sys.html#sys.stdout) устанавливаются в `surrogateescape`.134135Принудительный режим UTF-8 позволяет изменить обработку текста во встроенном интерпретаторе Python без изменения настроек локали приложения-хоста.136137Хотя режим UTF-8 из [**PEP 540**](https://python-all.ru/3.13/whatsnew/3.7.html) имеет преимущество работы независимо от того, какие локали доступны в системе, у него есть недостаток: он не влияет на модули расширения (например, GNU `readline`), дочерние процессы, выполняющие не-Python приложения, и дочерние процессы, работающие под старыми версиями Python. Чтобы снизить риск повреждения текстовых данных при обмене с такими компонентами, Python 3.7 также реализует [PEP 540: Принудительный режим UTF-8 во время выполнения](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep540)).138139Режим UTF-8 включается по умолчанию, когда локаль установлена в `C` или `POSIX`, а функция принудительной смены локали [**PEP 538**](https://python-all.ru/3.13/whatsnew/3.7.html) не может изменить её на альтернативу на основе UTF-8 (будь то из-за установленной `PYTHONCOERCECLOCALE=0`, установленной `LC_ALL` или отсутствия подходящей целевой локали).140141> **См. также**142>143> **[**PEP 540**](https://python-all.ru/3.13/whatsnew/3.7.html) – Добавление нового режима UTF-8**144>145> Автор PEP и разработчик: Victor Stinner146147### PEP 553: Встроенная функция `breakpoint()`148149Python 3.7 включает новую встроенную функцию [`breakpoint()`](https://python-all.ru/3.13/library/functions.html#breakpoint) как простой и единообразный способ войти в отладчик Python.150151Встроенная функция `breakpoint()` вызывает [`sys.breakpointhook()`](https://python-all.ru/3.13/library/sys.html#sys.breakpointhook). По умолчанию последняя импортирует [`pdb`](https://python-all.ru/3.13/library/pdb.html#module-pdb), а затем вызывает `pdb.set_trace()`, но привязка `sys.breakpointhook()` к выбранной функции позволяет `breakpoint()` войти в любой отладчик. Кроме того, переменную окружения [`PYTHONBREAKPOINT`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONBREAKPOINT) можно установить в вызываемый объект выбранного отладчика. Установите `PYTHONBREAKPOINT=0`, чтобы полностью отключить встроенную `breakpoint()`.152153> **См. также**154>155> **[**PEP 553**](https://python-all.ru/3.13/whatsnew/3.7.html) – Встроенная функция breakpoint()**156>157> Автор PEP и разработчик: Barry Warsaw158159### PEP 539: Новый C API для локальной памяти потоков160161Хотя Python предоставляет C API для поддержки локальной памяти потоков; существующий [API локальной памяти потоков (TLS)](https://python-all.ru/3.13/c-api/init.html#thread-local-storage-api) использует int для представления ключей TLS на всех платформах. Обычно это не было проблемой для официально поддерживаемых платформ, но это не соответствует POSIX и не является переносимым в практическом смысле.162163[**PEP 539**](https://python-all.ru/3.13/whatsnew/3.7.html) изменяет это, предоставляя CPython новый [API для потокоспецифичной памяти (TSS)](https://python-all.ru/3.13/c-api/init.html#thread-specific-storage-api), который заменяет использование существующего API TLS внутри интерпретатора CPython, помечая при этом старый API как устаревший. API TSS использует новый тип [`Py_tss_t`](https://python-all.ru/3.13/c-api/init.html#c.Py_tss_t) вместо int для представления ключей TSS – непрозрачный тип, определение которого может зависеть от базовой реализации TLS. Таким образом, это позволит собирать CPython на платформах, где нативный ключ TLS определён таким образом, что его нельзя безопасно привести к int.164165Обратите внимание, что на платформах, где нативный ключ TLS определён таким образом, что его нельзя безопасно привести к int, все функции существующего API TLS будут неактивны (no-op) и немедленно возвращать ошибку. Это ясно указывает, что старый API не поддерживается на платформах, где его нельзя надёжно использовать, и что не будет предпринято никаких усилий для добавления такой поддержки.166167> **См. также**168>169> **[**PEP 539**](https://python-all.ru/3.13/whatsnew/3.7.html) – Новый C-API для локальной памяти потоков в CPython**170>171> Автор PEP: Erik M. Bray; реализация: Masayuki Yamamoto.172173### PEP 562: Настройка доступа к атрибутам модуля174175Python 3.7 позволяет определять [`__getattr__()`](https://python-all.ru/3.13/reference/datamodel.html#module.__getattr__) в модулях, и он будет вызываться, когда атрибут модуля не найден обычным способом. Определение [`__dir__()`](https://python-all.ru/3.13/reference/datamodel.html#module.__dir__) в модулях теперь также разрешено.176177Типичный пример, где это может быть полезно – устаревание атрибутов модуля и ленивая загрузка.178179> **См. также**180>181> **[**PEP 562**](https://python-all.ru/3.13/whatsnew/3.7.html) – Модуль `__getattr__` и `__dir__`**182>183> PEP написан и реализован Ivan Levkivskyi.184185### PEP 564: Новые функции времени с наносекундным разрешением186187Разрешение часов в современных системах может превышать ограниченную точность числа с плавающей запятой, возвращаемого функцией [`time.time()`](https://python-all.ru/3.13/library/time.html#time.time) и её вариантами. Чтобы избежать потери точности, [**PEP 564**](https://python-all.ru/3.13/whatsnew/3.7.html) добавляет шесть новых вариантов с наносекундами для существующих функций таймера в модуль [`time`](https://python-all.ru/3.13/library/time.html#module-time):188189- [`time.clock_gettime_ns()`](https://python-all.ru/3.13/library/time.html#time.clock_gettime_ns)190- [`time.clock_settime_ns()`](https://python-all.ru/3.13/library/time.html#time.clock_settime_ns)191- [`time.monotonic_ns()`](https://python-all.ru/3.13/library/time.html#time.monotonic_ns)192- [`time.perf_counter_ns()`](https://python-all.ru/3.13/library/time.html#time.perf_counter_ns)193- [`time.process_time_ns()`](https://python-all.ru/3.13/library/time.html#time.process_time_ns)194- [`time.time_ns()`](https://python-all.ru/3.13/library/time.html#time.time_ns)195196Новые функции возвращают количество наносекунд в виде целого числа.197198[**Измерения**](https://python-all.ru/3.13/whatsnew/3.7.html) показывают, что в Linux и Windows разрешение [`time.time_ns()`](https://python-all.ru/3.13/library/time.html#time.time_ns) примерно в 3 раза лучше, чем [`time.time()`](https://python-all.ru/3.13/library/time.html#time.time).199200> **См. также**201>202> **[**PEP 564**](https://python-all.ru/3.13/whatsnew/3.7.html) – Добавление новых функций времени с наносекундным разрешением**203>204> Автор PEP и разработчик: Victor Stinner205206### PEP 565: Показывать DeprecationWarning в `__main__`207208Обработка [`DeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#DeprecationWarning) по умолчанию была изменена таким образом, что эти предупреждения снова показываются по умолчанию, но только если код, вызывающий их, выполняется непосредственно в модуле [`__main__`](https://python-all.ru/3.13/library/__main__.html#module-__main__). В результате разработчики однофайловых скриптов и те, кто использует Python интерактивно, снова начнут видеть предупреждения об устаревании для используемых API, но предупреждения об устаревании, вызванные импортированными модулями приложений, библиотек и фреймворков, по-прежнему будут скрыты по умолчанию.209210В результате этого изменения стандартная библиотека теперь позволяет разработчикам выбирать между тремя разными вариантами поведения при выводе предупреждений об устаревании:211212- [`FutureWarning`](https://python-all.ru/3.13/library/exceptions.html#FutureWarning): всегда отображается по умолчанию; рекомендуется для предупреждений, которые должны видеть конечные пользователи приложения (например, об устаревших настройках конфигурации приложения).213- [`DeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#DeprecationWarning): отображается по умолчанию только в [`__main__`](https://python-all.ru/3.13/library/__main__.html#module-__main__) и при запуске тестов; рекомендуется для предупреждений, которые должны видеть другие разработчики Python, когда обновление версии может привести к изменению поведения или ошибке.214- [`PendingDeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#PendingDeprecationWarning): отображается по умолчанию только при запуске тестов; предназначено для случаев, когда будущее обновление версии изменит категорию предупреждения на [`DeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#DeprecationWarning) или [`FutureWarning`](https://python-all.ru/3.13/library/exceptions.html#FutureWarning).215216Ранее оба [`DeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#DeprecationWarning) и [`PendingDeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#PendingDeprecationWarning) были видны только при запуске тестов, из-за чего разработчики, которые в основном пишут однофайловые скрипты или используют Python в интерактивном режиме, могли быть застигнуты врасплох критическими изменениями в используемых ими API.217218> **См. также**219>220> **[**PEP 565**](https://python-all.ru/3.13/whatsnew/3.7.html) – Показывать DeprecationWarning в `__main__`**221>222> PEP написан и реализован Nick Coghlan.223224### PEP 560: Базовая поддержка модуля `typing` и обобщённых типов225226Изначально [**PEP 484**](https://python-all.ru/3.13/whatsnew/3.7.html) был спроектирован таким образом, чтобы не вносить *никаких* изменений в ядро интерпретатора CPython. Теперь аннотации типов и модуль [`typing`](https://python-all.ru/3.13/library/typing.html#module-typing) широко используются сообществом, поэтому это ограничение снято. PEP вводит два специальных метода – [`__class_getitem__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__class_getitem__) и [`__mro_entries__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__mro_entries__). Эти методы теперь используются большинством классов и специальных конструкций в `typing`. В результате скорость различных операций с типами возросла до 7 раз, обобщённые типы можно использовать без конфликтов метаклассов, а также исправлено несколько давних ошибок в модуле `typing`.227228> **См. также**229>230> **[**PEP 560**](https://python-all.ru/3.13/whatsnew/3.7.html) – Базовая поддержка модуля typing и обобщённых типов**231>232> PEP написан и реализован Ivan Levkivskyi.233234### PEP 552: Хэш-файлы .pyc235236Традиционно Python проверял актуальность файлов кеша байт-кода (т.е. файлов `.pyc`) путём сравнения метаданных исходного файла (время последнего изменения и размер) с метаданными, сохранёнными в заголовке файла кеша при его создании. Хотя этот метод эффективен, у него есть недостатки. Если временные метки файловой системы слишком грубы, Python может пропустить обновления исходников, что приводит к путанице у пользователей. Кроме того, наличие временной метки в файле кеша создаёт проблемы для [воспроизводимости сборки](https://python-all.ru/3.13/whatsnew/3.7.html) и систем сборки, основанных на содержимом.237238[**PEP 552**](https://python-all.ru/3.13/whatsnew/3.7.html) расширяет формат pyc, позволяя использовать хэш исходного файла для проверки актуальности вместо временной метки. Такие файлы `.pyc` называются «хэш-файлами». По умолчанию Python продолжает использовать проверку на основе временной метки и не создаёт хэш-файлы `.pyc` во время выполнения. Хэш-файлы `.pyc` могут быть созданы с помощью [`py_compile`](https://python-all.ru/3.13/library/py_compile.html#module-py_compile) или [`compileall`](https://python-all.ru/3.13/library/compileall.html#module-compileall).239240Хэш-файлы `.pyc` бывают двух вариантов: проверяемые и непроверяемые. Для проверяемых хэш-файлов `.pyc` Python во время выполнения сверяет их с соответствующими исходными файлами, а для непроверяемых – нет. Непроверяемые хэш-файлы `.pyc` являются полезной оптимизацией производительности для сред, где внешняя по отношению к Python система (например, система сборки) отвечает за поддержание файлов `.pyc` в актуальном состоянии.241242См. раздел [Инвалидация кешированного байт-кода](https://python-all.ru/3.13/reference/import.html#pyc-invalidation) для получения дополнительной информации.243244> **См. также**245>246> **[**PEP 552**](https://python-all.ru/3.13/whatsnew/3.7.html) – Детерминированные pyc**247>248> PEP написан и реализован Benjamin Peterson.249250### PEP 545: Переводы документации Python251252[**PEP 545**](https://python-all.ru/3.13/whatsnew/3.7.html) описывает процесс создания и поддержки переводов документации Python.253254Добавлено три новых перевода:255256- Японский: [https://docs.python.org/ja/](https://python-all.ru/3.13/whatsnew/3.7.html)257- Французский: [https://docs.python.org/fr/](https://python-all.ru/3.13/whatsnew/3.7.html)258- Корейский: [https://docs.python.org/ko/](https://python-all.ru/3.13/whatsnew/3.7.html)259260> **См. также**261>262> **[**PEP 545**](https://python-all.ru/3.13/whatsnew/3.7.html) – Переводы документации Python**263>264> PEP написан и реализован Julien Palard, Inada Naoki и Victor Stinner.265266### Режим разработки Python (-X dev)267268Новый параметр командной строки [`-X`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) `dev` или новая переменная окружения [`PYTHONDEVMODE`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONDEVMODE) могут использоваться для включения [режима разработки Python](https://python-all.ru/3.13/library/devmode.html#devmode). В режиме разработки Python выполняет дополнительные проверки во время выполнения, которые слишком дороги для включения по умолчанию. Полное описание см. в документации [Режим разработки Python](https://python-all.ru/3.13/library/devmode.html#devmode).269270## Прочие изменения языка271272- Выражение [`await`](https://python-all.ru/3.13/reference/expressions.html#await) и включения, содержащие предложение [`async for`](https://python-all.ru/3.13/reference/compound_stmts.html#async-for), были недопустимы в [форматированных строковых литералах](https://python-all.ru/3.13/reference/lexical_analysis.html#f-strings) из-за проблемы в реализации. В Python 3.7 это ограничение было снято.273- Теперь функции можно передавать более 255 аргументов, и функция может иметь более 255 параметров. (Вклад Serhiy Storchaka в [bpo-12844](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-18896](https://python-all.ru/3.13/whatsnew/3.7.html).)274- [`bytes.fromhex()`](https://python-all.ru/3.13/library/stdtypes.html#bytes.fromhex) и [`bytearray.fromhex()`](https://python-all.ru/3.13/library/stdtypes.html#bytearray.fromhex) теперь игнорируют все пробельные символы ASCII, а не только пробелы. (Вклад Robert Xiao в [bpo-28927](https://python-all.ru/3.13/whatsnew/3.7.html).)275- [`str`](https://python-all.ru/3.13/library/stdtypes.html#str), [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes) и [`bytearray`](https://python-all.ru/3.13/library/stdtypes.html#bytearray) получили поддержку нового метода [`isascii()`](https://python-all.ru/3.13/library/stdtypes.html#str.isascii), который можно использовать для проверки, содержит ли строка или байтовая строка только символы ASCII. (Вклад INADA Naoki в [bpo-32677](https://python-all.ru/3.13/whatsnew/3.7.html).)276- [`ImportError`](https://python-all.ru/3.13/library/exceptions.html#ImportError) теперь выводит имя модуля и путь `__file__`, когда `from ... import ...` завершается неудачно. (Предложено Matthias Bussonnier в [bpo-29546](https://python-all.ru/3.13/whatsnew/3.7.html).)277- Теперь поддерживаются циклические импорты, использующие абсолютные импорты с привязкой подмодуля к имени. (Предложено Serhiy Storchaka в [bpo-30024](https://python-all.ru/3.13/whatsnew/3.7.html).)278- `object.__format__(x, '')` теперь эквивалентно `str(x)`, а не `format(str(self), '')`. (Предложено Serhiy Storchaka в [bpo-28974](https://python-all.ru/3.13/whatsnew/3.7.html).)279- Чтобы лучше поддерживать динамическое создание стеков вызовов, [`types.TracebackType`](https://python-all.ru/3.13/library/types.html#types.TracebackType) теперь можно создавать из кода Python, а атрибут [`tb_next`](https://python-all.ru/3.13/reference/datamodel.html#traceback.tb_next) у [tracebacks](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects) теперь доступен для записи. (Предложено Nathaniel J. Smith в [bpo-30579](https://python-all.ru/3.13/whatsnew/3.7.html).)280- При использовании ключа [`-m`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-m), `sys.path[0]` теперь разворачивается в полный путь начального каталога, а не остаётся пустым каталогом (это позволяет импортировать из *текущего* рабочего каталога на момент импорта). (Предложено Nick Coghlan в [bpo-33053](https://python-all.ru/3.13/whatsnew/3.7.html).)281- Новый параметр [`-X`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) `importtime` или переменная окружения [`PYTHONPROFILEIMPORTTIME`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPROFILEIMPORTTIME) могут использоваться для отображения времени импорта каждого модуля. (Предложено Inada Naoki в [bpo-31415](https://python-all.ru/3.13/whatsnew/3.7.html).)282283## Новые модули284285### contextvars286287Новый модуль [`contextvars`](https://python-all.ru/3.13/library/contextvars.html#module-contextvars) и набор [новых C API](https://python-all.ru/3.13/c-api/contextvars.html#contextvarsobjects) вводят поддержку *контекстных переменных*. Контекстные переменные концептуально похожи на потоковые локальные переменные. В отличие от TLS, контекстные переменные корректно поддерживают асинхронный код.288289Модули [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) и [`decimal`](https://python-all.ru/3.13/library/decimal.html#module-decimal) были обновлены для использования и поддержки контекстных переменных «из коробки». В частности, активный десятичный контекст теперь хранится в контекстной переменной, что позволяет операциям с десятичными числами работать с правильным контекстом в асинхронном коде.290291> **См. также**292>293> **[**PEP 567**](https://python-all.ru/3.13/whatsnew/3.7.html) – Контекстные переменные**294>295> PEP написан и реализован Yury Selivanov296297### dataclasses298299Новый декоратор [`dataclass()`](https://python-all.ru/3.13/library/dataclasses.html#dataclasses.dataclass) предоставляет способ объявления *классов данных*. Класс данных описывает свои атрибуты с помощью аннотаций переменных класса. Его конструктор и другие магические методы, такие как [`__repr__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__repr__), [`__eq__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__eq__) и [`__hash__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__hash__), генерируются автоматически.300301Пример:302303```python304@dataclass305class Point:306    x: float307    y: float308    z: float = 0.0309310p = Point(1.5, 2.5)311print(p)   # выдаёт "Point(x=1.5, y=2.5, z=0.0)"312```313314> **См. также**315>316> **[**PEP 557**](https://python-all.ru/3.13/whatsnew/3.7.html) – Классы данных**317>318> PEP написан и реализован Eric V. Smith319320### importlib.resources321322Новый модуль [`importlib.resources`](https://python-all.ru/3.13/library/importlib.resources.html#module-importlib.resources) предоставляет несколько новых API и один новый ABC для доступа, открытия и чтения *ресурсов* внутри пакетов. Ресурсы примерно аналогичны файлам внутри пакетов, но не обязательно должны быть реальными файлами в физической файловой системе. Загрузчики модулей могут предоставлять функцию `get_resource_reader()`, которая возвращает экземпляр [`importlib.abc.ResourceReader`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.ResourceReader) для поддержки этого нового API. Встроенные загрузчики путей к файлам и загрузчики zip-файлов поддерживают это.323324Предложено Barry Warsaw и Brett Cannon в [bpo-32248](https://python-all.ru/3.13/whatsnew/3.7.html).325326> **См. также**327>328> [importlib\_resources](https://python-all.ru/3.13/whatsnew/3.7.html) – бэкпорт с PyPI для более ранних версий Python.329330## Улучшенные модули331332### argparse333334Новый метод [`ArgumentParser.parse_intermixed_args()`](https://python-all.ru/3.13/library/argparse.html#argparse.ArgumentParser.parse_intermixed_args) позволяет перемешивать опции и позиционные аргументы. (Предложено paul.j3 в [bpo-14191](https://python-all.ru/3.13/whatsnew/3.7.html).)335336### asyncio337338Модуль [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) получил множество новых возможностей, улучшений удобства использования и [производительности](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-asyncio-perf). Среди заметных изменений:339340- Новая [пробная](https://python-all.ru/3.13/glossary.html#term-provisional-API) функция [`asyncio.run()`](https://python-all.ru/3.13/library/asyncio-runner.html#asyncio.run) может использоваться для запуска корутины из синхронного кода путём автоматического создания и уничтожения цикла событий. (Предложено Yury Selivanov в [bpo-32314](https://python-all.ru/3.13/whatsnew/3.7.html).)341- asyncio получил поддержку [`contextvars`](https://python-all.ru/3.13/library/contextvars.html#module-contextvars). [`loop.call_soon()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.call_soon), [`loop.call_soon_threadsafe()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.call_soon_threadsafe), [`loop.call_later()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.call_later), [`loop.call_at()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.call_at) и [`Future.add_done_callback()`](https://python-all.ru/3.13/library/asyncio-future.html#asyncio.Future.add_done_callback) теперь имеют новый необязательный параметр *context*, передаваемый только по ключу. [`Tasks`](https://python-all.ru/3.13/library/asyncio-task.html#asyncio.Task) теперь отслеживают свой контекст автоматически. Подробнее см. [**PEP 567**](https://python-all.ru/3.13/whatsnew/3.7.html). (Предложено Yury Selivanov в [bpo-32436](https://python-all.ru/3.13/whatsnew/3.7.html).)342- Добавлена новая функция [`asyncio.create_task()`](https://python-all.ru/3.13/library/asyncio-task.html#asyncio.create_task) как сокращение для `asyncio.get_event_loop().create_task()`. (Предложено Andrew Svetlov в [bpo-32311](https://python-all.ru/3.13/whatsnew/3.7.html).)343- Новый метод [`loop.start_tls()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.start_tls) может использоваться для обновления существующего соединения до TLS. (Предложено Yury Selivanov в [bpo-23749](https://python-all.ru/3.13/whatsnew/3.7.html).)344- Новый метод [`loop.sock_recv_into()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.sock_recv_into) позволяет читать данные из сокета напрямую в предоставленный буфер, что позволяет уменьшить количество копирований данных. (Предложено Antoine Pitrou в [bpo-31819](https://python-all.ru/3.13/whatsnew/3.7.html).)345- Новая функция [`asyncio.current_task()`](https://python-all.ru/3.13/library/asyncio-task.html#asyncio.current_task) возвращает текущий выполняющийся экземпляр [`Task`](https://python-all.ru/3.13/library/asyncio-task.html#asyncio.Task), а новая функция [`asyncio.all_tasks()`](https://python-all.ru/3.13/library/asyncio-task.html#asyncio.all_tasks) возвращает набор всех существующих экземпляров `Task` в заданном цикле. Методы `Task.current_task()` и `Task.all_tasks()` объявлены устаревшими. (Предложено Andrew Svetlov в [bpo-32250](https://python-all.ru/3.13/whatsnew/3.7.html).)346- Новый *пробный* класс [`BufferedProtocol`](https://python-all.ru/3.13/library/asyncio-protocol.html#asyncio.BufferedProtocol) позволяет реализовывать потоковые протоколы с ручным управлением буфером приёма. (Предложено Yury Selivanov в [bpo-32251](https://python-all.ru/3.13/whatsnew/3.7.html).)347- Новая функция [`asyncio.get_running_loop()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.get_running_loop) возвращает текущий выполняющийся цикл и возбуждает исключение [`RuntimeError`](https://python-all.ru/3.13/library/exceptions.html#RuntimeError), если цикл не выполняется. Это отличается от [`asyncio.get_event_loop()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.get_event_loop), который *создаёт* новый цикл событий, если таковой не выполняется. (Предложено Yury Selivanov в [bpo-32269](https://python-all.ru/3.13/whatsnew/3.7.html).)348- Новый корутинный метод [`StreamWriter.wait_closed()`](https://python-all.ru/3.13/library/asyncio-stream.html#asyncio.StreamWriter.wait_closed) позволяет ожидать закрытия потокового писателя. Новый метод [`StreamWriter.is_closing()`](https://python-all.ru/3.13/library/asyncio-stream.html#asyncio.StreamWriter.is_closing) можно использовать для определения, закрывается ли писатель. (Предложено Andrew Svetlov в [bpo-32391](https://python-all.ru/3.13/whatsnew/3.7.html).)349- Новый [`loop.sock_sendfile()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.sock_sendfile) метод-корутина позволяет отправлять файлы с помощью [`os.sendfile`](https://python-all.ru/3.13/library/os.html#os.sendfile), когда это возможно. (Автор: Andrew Svetlov в [bpo-32410](https://python-all.ru/3.13/whatsnew/3.7.html).)350- Новые методы [`Future.get_loop()`](https://python-all.ru/3.13/library/asyncio-future.html#asyncio.Future.get_loop) и `Task.get_loop()` возвращают экземпляр цикла событий, в котором были созданы задача или future. [`Server.get_loop()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.Server.get_loop) позволяет сделать то же самое для объектов [`asyncio.Server`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.Server). (Авторы: Yury Selivanov в [bpo-32415](https://python-all.ru/3.13/whatsnew/3.7.html) и Srinivas Reddy Thatiparthy в [bpo-32418](https://python-all.ru/3.13/whatsnew/3.7.html).)351- Теперь можно управлять тем, как экземпляры [`asyncio.Server`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.Server) начинают обслуживание. Ранее сервер начинал обслуживание сразу при создании. Новый именованный аргумент *start\_serving* для [`loop.create_server()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.create_server) и [`loop.create_unix_server()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.create_unix_server), а также для [`Server.start_serving()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.Server.start_serving) и [`Server.serve_forever()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.Server.serve_forever) позволяет разделить создание сервера и его запуск. Новый метод [`Server.is_serving()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.Server.is_serving) возвращает `True`, если сервер обслуживает запросы. Объекты `Server` теперь являются асинхронными контекстными менеджерами:352353  ```python354  srv = await loop.create_server(...)355356  async with srv:357      # некоторый код358359  # На данный момент srv закрыт и больше не принимает новые соединения.360  ```361362  (Автор: Yury Selivanov в [bpo-32662](https://python-all.ru/3.13/whatsnew/3.7.html).)363- Объекты колбэков, возвращаемые [`loop.call_later()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.call_later), получили новый метод [`when()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.TimerHandle.when), который возвращает абсолютную временную метку запланированного колбэка. (Автор: Andrew Svetlov в [bpo-32741](https://python-all.ru/3.13/whatsnew/3.7.html).)364- Метод [`loop.create_datagram_endpoint()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.create_datagram_endpoint) получил поддержку Unix-сокетов. (Автор: Quentin Dawans в [bpo-31245](https://python-all.ru/3.13/whatsnew/3.7.html).)365- Функции [`asyncio.open_connection()`](https://python-all.ru/3.13/library/asyncio-stream.html#asyncio.open_connection), [`asyncio.start_server()`](https://python-all.ru/3.13/library/asyncio-stream.html#asyncio.start_server), методы [`loop.create_connection()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.create_connection), [`loop.create_server()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.create_server), [`loop.create_accepted_socket()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.connect_accepted_socket) и соответствующие им варианты для UNIX-сокетов теперь принимают именованный аргумент *ssl\_handshake\_timeout*. (Автор: Neil Aspinall в [bpo-29970](https://python-all.ru/3.13/whatsnew/3.7.html).)366- Новый метод [`Handle.cancelled()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.Handle.cancelled) возвращает `True`, если колбэк был отменён. (Автор: Marat Sharafutdinov в [bpo-31943](https://python-all.ru/3.13/whatsnew/3.7.html).)367- Исходный код asyncio был преобразован для использования синтаксиса [`async`](https://python-all.ru/3.13/reference/compound_stmts.html#async)/[`await`](https://python-all.ru/3.13/reference/expressions.html#await). (Автор: Andrew Svetlov в [bpo-32193](https://python-all.ru/3.13/whatsnew/3.7.html).)368- Новый метод [`ReadTransport.is_reading()`](https://python-all.ru/3.13/library/asyncio-protocol.html#asyncio.ReadTransport.is_reading) можно использовать для определения состояния чтения транспорта. Кроме того, вызовы [`ReadTransport.resume_reading()`](https://python-all.ru/3.13/library/asyncio-protocol.html#asyncio.ReadTransport.resume_reading) и [`ReadTransport.pause_reading()`](https://python-all.ru/3.13/library/asyncio-protocol.html#asyncio.ReadTransport.pause_reading) теперь являются идемпотентными. (Автор: Yury Selivanov в [bpo-32356](https://python-all.ru/3.13/whatsnew/3.7.html).)369- Методы цикла событий, принимающие пути к сокетам, теперь поддерживают передачу [объектов, подобных пути](https://python-all.ru/3.13/glossary.html#term-path-like-object). (Автор: Yury Selivanov в [bpo-32066](https://python-all.ru/3.13/whatsnew/3.7.html).)370- В [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) TCP-сокеты в Linux теперь создаются с `TCP_NODELAY` флагом, установленным по умолчанию. (Авторы: Yury Selivanov и Victor Stinner в [bpo-27456](https://python-all.ru/3.13/whatsnew/3.7.html).)371- Исключения, возникающие в отменённых задачах, больше не логируются. (Автор: Yury Selivanov в [bpo-30508](https://python-all.ru/3.13/whatsnew/3.7.html).)372- Новые классы `WindowsSelectorEventLoopPolicy` и `WindowsProactorEventLoopPolicy`. (Автор: Yury Selivanov в [bpo-33792](https://python-all.ru/3.13/whatsnew/3.7.html).)373374Некоторые API `asyncio` были [объявлены устаревшими](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-asyncio-deprecated).375376### binascii377378Функция [`b2a_uu()`](https://python-all.ru/3.13/library/binascii.html#binascii.b2a_uu) теперь принимает необязательный именованный аргумент *backtick*. Если он равен true, нули представляются символом `` '`' `` вместо пробелов. (Автор: Xiang Zhang в [bpo-30103](https://python-all.ru/3.13/whatsnew/3.7.html).)379380### calendar381382Класс [`HTMLCalendar`](https://python-all.ru/3.13/library/calendar.html#calendar.HTMLCalendar) получил новые атрибуты класса, которые упрощают настройку CSS-классов в создаваемом HTML-календаре. (Автор: Oz Tiram в [bpo-30095](https://python-all.ru/3.13/whatsnew/3.7.html).)383384### collections385386`collections.namedtuple()` теперь поддерживает значения по умолчанию. (Автор: Raymond Hettinger в [bpo-32320](https://python-all.ru/3.13/whatsnew/3.7.html).)387388### compileall389390[`compileall.compile_dir()`](https://python-all.ru/3.13/library/compileall.html#compileall.compile_dir) получил новый параметр *invalidation\_mode*, который можно использовать для включения [хеш-инвалидации .pyc](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep552). Режим инвалидации также можно указать в командной строке с помощью нового аргумента `--invalidation-mode`. (Автор: Benjamin Peterson в [bpo-31650](https://python-all.ru/3.13/whatsnew/3.7.html).)391392### concurrent.futures393394[`ProcessPoolExecutor`](https://python-all.ru/3.13/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor) и [`ThreadPoolExecutor`](https://python-all.ru/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) теперь поддерживают новые аргументы конструктора *initializer* и *initargs*. (Автор: Antoine Pitrou в [bpo-21423](https://python-all.ru/3.13/whatsnew/3.7.html).)395396[`ProcessPoolExecutor`](https://python-all.ru/3.13/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor) теперь может принимать контекст multiprocessing через новый аргумент *mp\_context*. (Автор: Thomas Moreau в [bpo-31540](https://python-all.ru/3.13/whatsnew/3.7.html).)397398### contextlib399400Новый [`nullcontext()`](https://python-all.ru/3.13/library/contextlib.html#contextlib.nullcontext) – это более простой и быстрый контекстный менеджер без действий, чем [`ExitStack`](https://python-all.ru/3.13/library/contextlib.html#contextlib.ExitStack). (Автор: Jesse-Bakker в [bpo-10049](https://python-all.ru/3.13/whatsnew/3.7.html).)401402Новые [`asynccontextmanager()`](https://python-all.ru/3.13/library/contextlib.html#contextlib.asynccontextmanager), [`AbstractAsyncContextManager`](https://python-all.ru/3.13/library/contextlib.html#contextlib.AbstractAsyncContextManager) и [`AsyncExitStack`](https://python-all.ru/3.13/library/contextlib.html#contextlib.AsyncExitStack) были добавлены в дополнение к их синхронным аналогам. (Авторы: Jelle Zijlstra в [bpo-29679](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-30241](https://python-all.ru/3.13/whatsnew/3.7.html), а также Alexander Mohr и Ilya Kulakov в [bpo-29302](https://python-all.ru/3.13/whatsnew/3.7.html).)403404### cProfile405406Командная строка [`cProfile`](https://python-all.ru/3.13/library/profile.html#module-cProfile) теперь принимает `-m module_name` в качестве альтернативы пути к скрипту. (Автор: Sanyam Khurana в [bpo-21862](https://python-all.ru/3.13/whatsnew/3.7.html).)407408### crypt409410Модуль `crypt` теперь поддерживает хеширование методом Blowfish. (Вклад Сергея Сторчака в [bpo-31664](https://python-all.ru/3.13/whatsnew/3.7.html).)411412Функция `mksalt()` теперь позволяет указывать количество раундов хэширования. (Вклад Сергея Сторчака в [bpo-31702](https://python-all.ru/3.13/whatsnew/3.7.html).)413414### datetime415416Новый метод [`datetime.fromisoformat()`](https://python-all.ru/3.13/library/datetime.html#datetime.datetime.fromisoformat) создает объект [`datetime`](https://python-all.ru/3.13/library/datetime.html#datetime.datetime) из строки в одном из форматов, выдаваемых [`datetime.isoformat()`](https://python-all.ru/3.13/library/datetime.html#datetime.datetime.isoformat). (Вклад Пола Ганссла в [bpo-15873](https://python-all.ru/3.13/whatsnew/3.7.html).)417418Класс [`tzinfo`](https://python-all.ru/3.13/library/datetime.html#datetime.tzinfo) теперь поддерживает смещения меньше минуты. (Вклад Александра Белопольского в [bpo-5288](https://python-all.ru/3.13/whatsnew/3.7.html).)419420### dbm421422[`dbm.dumb`](https://python-all.ru/3.13/library/dbm.html#module-dbm.dumb) теперь поддерживает чтение файлов только для чтения и больше не записывает индексный файл, если он не был изменен.423424### decimal425426Модуль [`decimal`](https://python-all.ru/3.13/library/decimal.html#module-decimal) теперь использует [контекстные переменные](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep567) для хранения десятичного контекста. (Вклад Юрия Селиванова в [bpo-32630](https://python-all.ru/3.13/whatsnew/3.7.html).)427428### dis429430Функция [`dis()`](https://python-all.ru/3.13/library/dis.html#dis.dis) теперь умеет дизассемблировать вложенные объекты кода (код включений, генераторных выражений и вложенных функций, а также код, используемый для построения вложенных классов). Максимальная глубина рекурсии дизассемблирования управляется новым параметром *depth*. (Вклад Сергея Сторчака в [bpo-11822](https://python-all.ru/3.13/whatsnew/3.7.html).)431432### distutils433434`README.rst` теперь включён в список стандартных файлов README пакета distutils и поэтому входит в состав исходных дистрибутивов. (Вклад Райана Гонсалеса в [bpo-11913](https://python-all.ru/3.13/whatsnew/3.7.html).)435436### enum437438Класс [`Enum`](https://python-all.ru/3.13/library/enum.html#enum.Enum) обзавелся новым свойством класса `_ignore_`, позволяющим перечислять имена свойств, которые не должны становиться членами перечисления. (Вклад Итана Фурмана в [bpo-31801](https://python-all.ru/3.13/whatsnew/3.7.html).)439440В Python 3.8 попытка проверить не-Enum объекты в классах [`Enum`](https://python-all.ru/3.13/library/enum.html#enum.Enum) приведет к возбуждению [`TypeError`](https://python-all.ru/3.13/library/exceptions.html#TypeError) (например, `1 in Color`); аналогично, попытка проверить не-Flag объекты у члена [`Flag`](https://python-all.ru/3.13/library/enum.html#enum.Flag) приведет к возбуждению `TypeError` (например, `1 in Perm.RW`); в настоящее время обе операции возвращают [`False`](https://python-all.ru/3.13/library/constants.html#False) и являются устаревшими. (Вклад Итана Фурмана в [bpo-33217](https://python-all.ru/3.13/whatsnew/3.7.html).)441442### functools443444[`functools.singledispatch()`](https://python-all.ru/3.13/library/functools.html#functools.singledispatch) теперь поддерживает регистрацию реализаций с использованием аннотаций типов. (Вклад Лукаша Ланги в [bpo-32227](https://python-all.ru/3.13/whatsnew/3.7.html).)445446### gc447448Новая функция [`gc.freeze()`](https://python-all.ru/3.13/library/gc.html#gc.freeze) позволяет заморозить все объекты, отслеживаемые сборщиком мусора, и исключить их из будущих сборок. Это может быть использовано перед вызовом POSIX `fork()`, чтобы сделать GC дружественным к копированию при записи или ускорить сборку. Новая функция [`gc.unfreeze()`](https://python-all.ru/3.13/library/gc.html#gc.unfreeze) отменяет эту операцию. Кроме того, [`gc.get_freeze_count()`](https://python-all.ru/3.13/library/gc.html#gc.get_freeze_count) может использоваться для получения количества замороженных объектов. (Вклад Ли Цзэкуня в [bpo-31558](https://python-all.ru/3.13/whatsnew/3.7.html).)449450### hmac451452Модуль [`hmac`](https://python-all.ru/3.13/library/hmac.html#module-hmac) теперь содержит оптимизированную однократную функцию [`digest()`](https://python-all.ru/3.13/library/hmac.html#hmac.digest), которая до трех раз быстрее, чем [`HMAC()`](https://python-all.ru/3.13/library/hmac.html#hmac.HMAC). (Вклад Кристиана Хаймеса в [bpo-32433](https://python-all.ru/3.13/whatsnew/3.7.html).)453454### http.client455456[`HTTPConnection`](https://python-all.ru/3.13/library/http.client.html#http.client.HTTPConnection) и [`HTTPSConnection`](https://python-all.ru/3.13/library/http.client.html#http.client.HTTPSConnection) теперь поддерживают новый аргумент *blocksize* для улучшения пропускной способности загрузки. (Вклад Нир Соффера в [bpo-31945](https://python-all.ru/3.13/whatsnew/3.7.html).)457458### http.server459460[`SimpleHTTPRequestHandler`](https://python-all.ru/3.13/library/http.server.html#http.server.SimpleHTTPRequestHandler) теперь поддерживает HTTP-заголовок `If-Modified-Since`. Сервер возвращает статус ответа 304, если целевой файл не был изменен после времени, указанного в заголовке. (Вклад Пьера Кентеля в [bpo-29654](https://python-all.ru/3.13/whatsnew/3.7.html).)461462[`SimpleHTTPRequestHandler`](https://python-all.ru/3.13/library/http.server.html#http.server.SimpleHTTPRequestHandler) принимает новый аргумент *directory* в дополнение к новому аргументу командной строки `--directory`. С этим параметром сервер обслуживает указанный каталог; по умолчанию он использует текущий рабочий каталог. (Вклад Стефана Виртеля и Жюльена Палара в [bpo-28707](https://python-all.ru/3.13/whatsnew/3.7.html).)463464Новый класс [`ThreadingHTTPServer`](https://python-all.ru/3.13/library/http.server.html#http.server.ThreadingHTTPServer) использует потоки для обработки запросов с помощью [`ThreadingMixIn`](https://python-all.ru/3.13/library/socketserver.html#socketserver.ThreadingMixIn). Он используется, когда `http.server` запускается с `-m`. (Вклад Жюльена Палара в [bpo-31639](https://python-all.ru/3.13/whatsnew/3.7.html).)465466### idlelib и IDLE467468Множество исправлений для автодополнения. (Вклад Луи Лу в [bpo-15786](https://python-all.ru/3.13/whatsnew/3.7.html).)469470Module Browser (в меню File, ранее назывался Class Browser), теперь отображает вложенные функции и классы в дополнение к функциям и классам верхнего уровня. (Вклад Гильерме Поло, Шерил Сабеллы и Терри Джан Риди в [bpo-1612262](https://python-all.ru/3.13/whatsnew/3.7.html).)471472Диалог Settings (Options, Configure IDLE) был частично переписан для улучшения как внешнего вида, так и функциональности. (Вклад Шерил Сабеллы и Терри Джан Риди в нескольких тикетах.)473474Образец шрифта теперь включает подборку нелатинских символов, чтобы пользователи могли лучше оценить эффект выбора конкретного шрифта. (Предложено Terry Jan Reedy в [bpo-13802](https://python-all.ru/3.13/whatsnew/3.7.html).) Образец можно редактировать, добавляя другие символы. (Предложено Serhiy Storchaka в [bpo-31860](https://python-all.ru/3.13/whatsnew/3.7.html).)475476Функции IDLE, ранее реализованные как расширения, теперь реализованы как обычные функции. Их настройки перенесены с вкладки «Расширения» на другие вкладки диалоговых окон. (Предложено Charles Wohlganger и Terry Jan Reedy в [bpo-27099](https://python-all.ru/3.13/whatsnew/3.7.html).)477478Обновлена опция контекста кода редактора. Окно отображает все строки контекста до maxlines. Нажатие на строку контекста перемещает редактор к этой строке. Цвета контекста для пользовательских тем добавлены на вкладку «Подсветка» диалогового окна настроек. (Предложено Cheryl Sabella и Terry Jan Reedy в [bpo-33642](https://python-all.ru/3.13/whatsnew/3.7.html), [bpo-33768](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-33679](https://python-all.ru/3.13/whatsnew/3.7.html).)479480В Windows новый вызов API сообщает Windows, что tk масштабируется под DPI. На Windows 8.1+ или 10, при неизменённых свойствах совместимости DPI двоичного файла Python и разрешении монитора более 96 DPI, это должно сделать текст и линии более чёткими. В остальных случаях это не должно оказывать эффекта. (Предложено Terry Jan Reedy в [bpo-33656](https://python-all.ru/3.13/whatsnew/3.7.html).)481482Новое в 3.7.1:483484Вывод длиннее N строк (по умолчанию 50) сворачивается в кнопку. N можно изменить в разделе PyShell на вкладке General диалогового окна Settings. Меньшее количество строк, но возможно очень длинных, можно свернуть, щелкнув правой кнопкой по выводу. Свёрнутый вывод можно развернуть на месте двойным щелчком по кнопке, либо в буфер обмена или отдельное окно щелчком правой кнопки по кнопке. (Предложено Tal Einat в [bpo-1529353](https://python-all.ru/3.13/whatsnew/3.7.html).)485486Описанные выше изменения были перенесены в версии поддержки 3.6.487488НОВОЕ в 3.7.4:489490Добавлен пункт «Run Customized» в меню Run для запуска модуля с пользовательскими настройками. Введённые аргументы командной строки добавляются в sys.argv. Они снова отображаются в поле при следующем запуске с настройками. Также можно отключить обычный перезапуск главного модуля Shell. (Предложено Cheryl Sabella, Terry Jan Reedy и другими в [bpo-5680](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-37627](https://python-all.ru/3.13/whatsnew/3.7.html).)491492Новое в 3.7.5:493494Добавлена опциональная нумерация строк для окон редактора IDLE. Окна открываются без номеров строк, если не задано иное на вкладке «Общие» диалога конфигурации. Номера строк для существующего окна показываются и скрываются в меню Options. (Предложено Tal Einat и Saimadhav Heblikar в [bpo-17535](https://python-all.ru/3.13/whatsnew/3.7.html).)495496### importlib497498ABC [`importlib.abc.ResourceReader`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.ResourceReader) был введён для поддержки загрузки ресурсов из пакетов. См. также [importlib.resources](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-importlib-resources). (Предложено Barry Warsaw, Brett Cannon в [bpo-32248](https://python-all.ru/3.13/whatsnew/3.7.html).)499500[`importlib.reload()`](https://python-all.ru/3.13/library/importlib.html#importlib.reload) теперь вызывает [`ModuleNotFoundError`](https://python-all.ru/3.13/library/exceptions.html#ModuleNotFoundError), если у модуля отсутствует spec. (Предложено Garvit Khatri в [bpo-29851](https://python-all.ru/3.13/whatsnew/3.7.html).)501502[`importlib.util.find_spec()`](https://python-all.ru/3.13/library/importlib.html#importlib.util.find_spec) теперь вызывает [`ModuleNotFoundError`](https://python-all.ru/3.13/library/exceptions.html#ModuleNotFoundError) вместо [`AttributeError`](https://python-all.ru/3.13/library/exceptions.html#AttributeError), если указанный родительский модуль не является пакетом (т.е. у него отсутствует атрибут `__path__`). (Предложено Milan Oberkirch в [bpo-30436](https://python-all.ru/3.13/whatsnew/3.7.html).)503504Новый [`importlib.util.source_hash()`](https://python-all.ru/3.13/library/importlib.html#importlib.util.source_hash) можно использовать для вычисления хеша переданного исходного кода. [Файл .pyc, основанный на хеше](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep552), содержит значение, возвращаемое этой функцией.505506### io507508Новый метод [`TextIOWrapper.reconfigure()`](https://python-all.ru/3.13/library/io.html#io.TextIOWrapper.reconfigure) можно использовать для перенастройки текстового потока с новыми настройками. (Предложено Antoine Pitrou в [bpo-30526](https://python-all.ru/3.13/whatsnew/3.7.html) и INADA Naoki в [bpo-15216](https://python-all.ru/3.13/whatsnew/3.7.html).)509510### ipaddress511512Новые методы `subnet_of()` и `supernet_of()` классов [`ipaddress.IPv6Network`](https://python-all.ru/3.13/library/ipaddress.html#ipaddress.IPv6Network) и [`ipaddress.IPv4Network`](https://python-all.ru/3.13/library/ipaddress.html#ipaddress.IPv4Network) можно использовать для проверок принадлежности сети. (Предложено Michel Albert и Cheryl Sabella в [bpo-20825](https://python-all.ru/3.13/whatsnew/3.7.html).)513514### itertools515516[`itertools.islice()`](https://python-all.ru/3.13/library/itertools.html#itertools.islice) теперь принимает [`integer-like objects`](https://python-all.ru/3.13/reference/datamodel.html#object.__index__) в качестве аргументов start, stop и slice. (Предложено Will Roberts в [bpo-30537](https://python-all.ru/3.13/whatsnew/3.7.html).)517518### locale519520Новый аргумент *monetary* для [`locale.format_string()`](https://python-all.ru/3.13/library/locale.html#locale.format_string) можно использовать, чтобы преобразование использовало денежные разделители тысяч и строки группировки. (Предложено Garvit в [bpo-10379](https://python-all.ru/3.13/whatsnew/3.7.html).)521522Функция [`locale.getpreferredencoding()`](https://python-all.ru/3.13/library/locale.html#locale.getpreferredencoding) теперь всегда возвращает `'UTF-8'` на Android или при включённом [принудительном режиме UTF-8](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep540).523524### logging525526[`Logger`](https://python-all.ru/3.13/library/logging.html#logging.Logger) instances can now be serialized. (Contributed by Vinay Sajip in [bpo-30520](https://python-all.ru/3.13/whatsnew/3.7.html).)527528Новый метод [`StreamHandler.setStream()`](https://python-all.ru/3.13/library/logging.handlers.html#logging.StreamHandler.setStream) можно использовать для замены потока логгера после создания обработчика. (Предложено Vinay Sajip в [bpo-30522](https://python-all.ru/3.13/whatsnew/3.7.html).)529530Теперь можно указывать именованные аргументы для конструкторов обработчиков в конфигурации, передаваемой в [`logging.config.fileConfig()`](https://python-all.ru/3.13/library/logging.config.html#logging.config.fileConfig). (Предложено Preston Landers в [bpo-31080](https://python-all.ru/3.13/whatsnew/3.7.html).)531532### math533534Новая функция [`math.remainder()`](https://python-all.ru/3.13/library/math.html#math.remainder) реализует операцию остатка по стандарту IEEE 754. (Предложено Mark Dickinson в [bpo-29962](https://python-all.ru/3.13/whatsnew/3.7.html).)535536### mimetypes537538MIME-тип .bmp изменён с `'image/x-ms-bmp'` на `'image/bmp'`. (Автор: Nitish Chandra, [bpo-22589](https://python-all.ru/3.13/whatsnew/3.7.html).)539540### msilib541542Новый метод `Database.Close()` можно использовать для закрытия базы данных MSI. (Автор: Berker Peksag, [bpo-20486](https://python-all.ru/3.13/whatsnew/3.7.html).)543544### multiprocessing545546Новый метод [`Process.close()`](https://python-all.ru/3.13/library/multiprocessing.html#multiprocessing.Process.close) явно закрывает объект процесса и освобождает все связанные с ним ресурсы. Если базовый процесс ещё выполняется, возбуждается исключение [`ValueError`](https://python-all.ru/3.13/library/exceptions.html#ValueError). (Автор: Antoine Pitrou, [bpo-30596](https://python-all.ru/3.13/whatsnew/3.7.html).)547548Новый метод [`Process.kill()`](https://python-all.ru/3.13/library/multiprocessing.html#multiprocessing.Process.kill) можно использовать для завершения процесса с помощью сигнала [`SIGKILL`](https://python-all.ru/3.13/library/signal.html#signal.SIGKILL) в Unix. (Автор: Vitor Pereira, [bpo-30794](https://python-all.ru/3.13/whatsnew/3.7.html).)549550Нефоновые потоки, созданные [`Process`](https://python-all.ru/3.13/library/multiprocessing.html#multiprocessing.Process), теперь соединяются при завершении процесса. (Автор: Antoine Pitrou, [bpo-18966](https://python-all.ru/3.13/whatsnew/3.7.html).)551552### os553554[`os.fwalk()`](https://python-all.ru/3.13/library/os.html#os.fwalk) теперь принимает аргумент *path* как [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes). (Автор: Serhiy Storchaka, [bpo-28682](https://python-all.ru/3.13/whatsnew/3.7.html).)555556[`os.scandir()`](https://python-all.ru/3.13/library/os.html#os.scandir) получил поддержку [файловых дескрипторов](https://python-all.ru/3.13/library/os.html#path-fd). (Автор: Serhiy Storchaka, [bpo-25996](https://python-all.ru/3.13/whatsnew/3.7.html).)557558Новая функция [`register_at_fork()`](https://python-all.ru/3.13/library/os.html#os.register_at_fork) позволяет регистрировать колбэки Python для выполнения при ответвлении процесса (fork). (Автор: Antoine Pitrou, [bpo-16500](https://python-all.ru/3.13/whatsnew/3.7.html).)559560Добавлены функции [`os.preadv()`](https://python-all.ru/3.13/library/os.html#os.preadv) (объединяет функциональность [`os.readv()`](https://python-all.ru/3.13/library/os.html#os.readv) и [`os.pread()`](https://python-all.ru/3.13/library/os.html#os.pread)) и [`os.pwritev()`](https://python-all.ru/3.13/library/os.html#os.pwritev) (объединяет функциональность [`os.writev()`](https://python-all.ru/3.13/library/os.html#os.writev) и [`os.pwrite()`](https://python-all.ru/3.13/library/os.html#os.pwrite)). (Автор: Pablo Galindo, [bpo-31368](https://python-all.ru/3.13/whatsnew/3.7.html).)561562Аргумент mode функции [`os.makedirs()`](https://python-all.ru/3.13/library/os.html#os.makedirs) больше не влияет на биты разрешений вновь создаваемых промежуточных каталогов. (Автор: Serhiy Storchaka, [bpo-19930](https://python-all.ru/3.13/whatsnew/3.7.html).)563564[`os.dup2()`](https://python-all.ru/3.13/library/os.html#os.dup2) теперь возвращает новый файловый дескриптор. Ранее всегда возвращалось `None`. (Автор: Benjamin Peterson, [bpo-32441](https://python-all.ru/3.13/whatsnew/3.7.html).)565566Структура, возвращаемая [`os.stat()`](https://python-all.ru/3.13/library/os.html#os.stat), теперь содержит атрибут [`st_fstype`](https://python-all.ru/3.13/library/os.html#os.stat_result.st_fstype) в Solaris и его производных. (Автор: Jesús Cea Avión, [bpo-32659](https://python-all.ru/3.13/whatsnew/3.7.html).)567568### pathlib569570Новый метод [`Path.is_mount()`](https://python-all.ru/3.13/library/pathlib.html#pathlib.Path.is_mount) теперь доступен в системах POSIX и может использоваться для определения, является ли путь точкой монтирования. (Автор: Cooper Ry Lees, [bpo-30897](https://python-all.ru/3.13/whatsnew/3.7.html).)571572### pdb573574[`pdb.set_trace()`](https://python-all.ru/3.13/library/pdb.html#pdb.set_trace) теперь принимает необязательный именованный аргумент *header*. Если он передан, значение выводится на консоль прямо перед началом отладки. (Автор: Barry Warsaw, [bpo-31389](https://python-all.ru/3.13/whatsnew/3.7.html).)575576Командная строка [`pdb`](https://python-all.ru/3.13/library/pdb.html#module-pdb) теперь принимает `-m module_name` в качестве альтернативы файлу скрипта. (Автор: Mario Corchero, [bpo-32206](https://python-all.ru/3.13/whatsnew/3.7.html).)577578### py\_compile579580[`py_compile.compile()`](https://python-all.ru/3.13/library/py_compile.html#py_compile.compile) – и, как следствие, [`compileall`](https://python-all.ru/3.13/library/compileall.html#module-compileall) – теперь учитывает переменную окружения `SOURCE_DATE_EPOCH`, безусловно создавая файлы `.pyc` для хеш-валидации. Это позволяет гарантировать [воспроизводимые сборки](https://python-all.ru/3.13/whatsnew/3.7.html) файлов `.pyc` при их нетерпеливом создании. (Автор: Bernhard M. Wiedemann, [bpo-29708](https://python-all.ru/3.13/whatsnew/3.7.html).)581582### pydoc583584Сервер pydoc теперь может привязываться к произвольному имени хоста, задаваемому новым аргументом командной строки `-n`. (Автор: Feanil Patel, [bpo-31128](https://python-all.ru/3.13/whatsnew/3.7.html).)585586### очередь587588Новый класс [`SimpleQueue`](https://python-all.ru/3.13/library/queue.html#queue.SimpleQueue) представляет собой неограниченную очередь FIFO. (Автор: Antoine Pitrou, [bpo-14976](https://python-all.ru/3.13/whatsnew/3.7.html).)589590### re591592Флаги [`re.ASCII`](https://python-all.ru/3.13/library/re.html#re.ASCII), [`re.LOCALE`](https://python-all.ru/3.13/library/re.html#re.LOCALE) и [`re.UNICODE`](https://python-all.ru/3.13/library/re.html#re.UNICODE) можно задать в пределах группы. (Автор: Serhiy Storchaka, [bpo-31690](https://python-all.ru/3.13/whatsnew/3.7.html).)593594[`re.split()`](https://python-all.ru/3.13/library/re.html#re.split) теперь поддерживает разбиение по шаблону типа `r'\b'`, `'^$'` или `(?=-)`, который соответствует пустой строке. (Автор: Serhiy Storchaka, [bpo-25054](https://python-all.ru/3.13/whatsnew/3.7.html).)595596Регулярные выражения, скомпилированные с флагом [`re.LOCALE`](https://python-all.ru/3.13/library/re.html#re.LOCALE), больше не зависят от локали на этапе компиляции. Настройки локали применяются только при использовании скомпилированного регулярного выражения. (Автор: Serhiy Storchaka, [bpo-30215](https://python-all.ru/3.13/whatsnew/3.7.html).)597598[`FutureWarning`](https://python-all.ru/3.13/library/exceptions.html#FutureWarning) теперь выдаётся, если регулярное выражение содержит конструкции набора символов, которые в будущем изменят семантику, например, вложенные наборы и операции над наборами. (Автор: Serhiy Storchaka, [bpo-30349](https://python-all.ru/3.13/whatsnew/3.7.html).)599600Скомпилированные регулярные выражения и объекты совпадений теперь можно копировать с помощью [`copy.copy()`](https://python-all.ru/3.13/library/copy.html#copy.copy) и [`copy.deepcopy()`](https://python-all.ru/3.13/library/copy.html#copy.deepcopy). (Автор: Serhiy Storchaka, [bpo-10076](https://python-all.ru/3.13/whatsnew/3.7.html).)601602### signal603604Новый аргумент *warn\_on\_full\_buffer* функции [`signal.set_wakeup_fd()`](https://python-all.ru/3.13/library/signal.html#signal.set_wakeup_fd) позволяет указать, следует ли Python выводить предупреждение в stderr при переполнении буфера пробуждения. (Автор: Nathaniel J. Smith, [bpo-30050](https://python-all.ru/3.13/whatsnew/3.7.html).)605606### socket607608Новый метод [`socket.getblocking()`](https://python-all.ru/3.13/library/socket.html#socket.socket.getblocking) возвращает `True`, если сокет находится в блокирующем режиме, и `False` в противном случае. (Автор: Yury Selivanov, [bpo-32373](https://python-all.ru/3.13/whatsnew/3.7.html).)609610Новая функция [`socket.close()`](https://python-all.ru/3.13/library/socket.html#socket.close) закрывает переданный файловый дескриптор сокета. Эту функцию следует использовать вместо [`os.close()`](https://python-all.ru/3.13/library/os.html#os.close) для лучшей совместимости между платформами. (Автор: Christian Heimes, [bpo-32454](https://python-all.ru/3.13/whatsnew/3.7.html).)611612Модуль [`socket`](https://python-all.ru/3.13/library/socket.html#module-socket) теперь предоставляет константы [socket.TCP\_CONGESTION](https://python-all.ru/3.13/library/socket.html#socket-unix-constants) (Linux 2.6.13), [socket.TCP\_USER\_TIMEOUT](https://python-all.ru/3.13/library/socket.html#socket-unix-constants) (Linux 2.6.37) и [socket.TCP\_NOTSENT\_LOWAT](https://python-all.ru/3.13/library/socket.html#socket-unix-constants) (Linux 3.12). (Авторы: Omar Sandoval, [bpo-26273](https://python-all.ru/3.13/whatsnew/3.7.html) и Nathaniel J. Smith, [bpo-29728](https://python-all.ru/3.13/whatsnew/3.7.html).)613614Добавлена поддержка сокетов [`socket.AF_VSOCK`](https://python-all.ru/3.13/library/socket.html#socket.AF_VSOCK) для обеспечения связи между виртуальными машинами и их хост-системами. (Автор: Cathy Avery, [bpo-27584](https://python-all.ru/3.13/whatsnew/3.7.html).)615616Теперь сокеты по умолчанию автоматически определяют семейство, тип и протокол по файловому дескриптору. (Автор: Christian Heimes, [bpo-28134](https://python-all.ru/3.13/whatsnew/3.7.html).)617618### socketserver619620[`socketserver.ThreadingMixIn.server_close`](https://python-all.ru/3.13/library/socketserver.html#socketserver.BaseServer.server_close) теперь ожидает завершения всех потоков, не являющихся демонами. `socketserver.ForkingMixIn.server_close` теперь ожидает завершения всех дочерних процессов.621622Добавлен новый атрибут класса [`socketserver.ForkingMixIn.block_on_close`](https://python-all.ru/3.13/library/socketserver.html#socketserver.ThreadingMixIn.block_on_close) для классов [`socketserver.ForkingMixIn`](https://python-all.ru/3.13/library/socketserver.html#socketserver.ForkingMixIn) и [`socketserver.ThreadingMixIn`](https://python-all.ru/3.13/library/socketserver.html#socketserver.ThreadingMixIn). Установите этот атрибут класса в `False`, чтобы получить поведение, как до версии 3.7.623624### sqlite3625626[`sqlite3.Connection`](https://python-all.ru/3.13/library/sqlite3.html#sqlite3.Connection) теперь предоставляет метод [`backup()`](https://python-all.ru/3.13/library/sqlite3.html#sqlite3.Connection.backup), если используемая библиотека SQLite имеет версию 3.6.11 или выше. (Автор: Lele Gaifax, [bpo-27645](https://python-all.ru/3.13/whatsnew/3.7.html).)627628Аргумент *database* функции [`sqlite3.connect()`](https://python-all.ru/3.13/library/sqlite3.html#sqlite3.connect) теперь принимает любой [объект, подобный пути (path-like object)](https://python-all.ru/3.13/glossary.html#term-path-like-object), а не только строку. (Автор: Anders Lorentsen, [bpo-31843](https://python-all.ru/3.13/whatsnew/3.7.html).)629630### ssl631632Модуль [`ssl`](https://python-all.ru/3.13/library/ssl.html#module-ssl) теперь использует встроенный API OpenSSL вместо `match_hostname()` для проверки имени хоста или IP-адреса. Значения проверяются во время рукопожатия TLS. Любая ошибка проверки сертификата, включая неудачную проверку имени хоста, теперь вызывает [`SSLCertVerificationError`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLCertVerificationError) и прерывает рукопожатие с соответствующим сообщением TLS Alert. Новое исключение содержит дополнительную информацию. Проверку имени хоста можно настроить с помощью [`SSLContext.hostname_checks_common_name`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext.hostname_checks_common_name). (Автор: Christian Heimes, [bpo-31399](https://python-all.ru/3.13/whatsnew/3.7.html).)633634> **Примечание**635>636> Улучшенная проверка имени хоста требует реализации *libssl*, совместимой с OpenSSL 1.0.2 или 1.1. Следовательно, OpenSSL 0.9.8 и 1.0.1 больше не поддерживаются (см. [Platform Support Removals](https://python-all.ru/3.13/whatsnew/3.7.html#platform-support-removals) для подробностей). Модуль ssl в основном совместим с LibreSSL 2.7.2 и новее.637638Модуль `ssl` больше не отправляет IP-адреса в расширении SNI TLS. (Автор: Christian Heimes, [bpo-32185](https://python-all.ru/3.13/whatsnew/3.7.html).)639640`match_hostname()` больше не поддерживает частичные подстановочные знаки (wildcards) типа `www*.example.org`. (Авторы: Mandeep Singh, [bpo-23033](https://python-all.ru/3.13/whatsnew/3.7.html) и Christian Heimes, [bpo-31399](https://python-all.ru/3.13/whatsnew/3.7.html).)641642Выбор набора шифров по умолчанию в модуле `ssl` теперь использует подход на основе чёрного списка вместо жёстко заданного белого списка. Python больше не включает повторно шифры, заблокированные обновлениями безопасности OpenSSL. Выбор набора шифров по умолчанию можно настроить во время компиляции. (Автор: Christian Heimes, [bpo-31429](https://python-all.ru/3.13/whatsnew/3.7.html).)643644Теперь поддерживается проверка сертификатов сервера, содержащих интернационализированные доменные имена (IDN). В рамках этого изменения атрибут [`SSLSocket.server_hostname`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLSocket.server_hostname) теперь хранит ожидаемое имя хоста в A-label форме (`"xn--pythn-mua.org"`), а не в U-label форме (`"pythön.org"`). (Авторы: Nathaniel J. Smith и Christian Heimes, [bpo-28414](https://python-all.ru/3.13/whatsnew/3.7.html).)645646Модуль `ssl` получил предварительную и экспериментальную поддержку TLS 1.3 и OpenSSL 1.1.1. На момент выпуска Python 3.7.0 OpenSSL 1.1.1 всё ещё разрабатывался, а TLS 1.3 ещё не был окончательно стандартизирован. Рукопожатие и протокол TLS 1.3 ведут себя несколько иначе, чем TLS 1.2 и более ранние версии; см. [TLS 1.3](https://python-all.ru/3.13/library/ssl.html#ssl-tlsv1-3). (Автор: Christian Heimes, [bpo-32947](https://python-all.ru/3.13/whatsnew/3.7.html), [bpo-20995](https://python-all.ru/3.13/whatsnew/3.7.html), [bpo-29136](https://python-all.ru/3.13/whatsnew/3.7.html), [bpo-30622](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-33618](https://python-all.ru/3.13/whatsnew/3.7.html))647648[`SSLSocket`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLSocket) и [`SSLObject`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLObject) больше не имеют открытого конструктора. Прямое создание экземпляров никогда не было документированной и поддерживаемой возможностью. Экземпляры должны создаваться методами [`SSLContext`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext): [`wrap_socket()`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext.wrap_socket) и [`wrap_bio()`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext.wrap_bio). (Автор: Christian Heimes, [bpo-32951](https://python-all.ru/3.13/whatsnew/3.7.html))649650API OpenSSL 1.1 для установки минимальной и максимальной версии протокола TLS доступны как [`SSLContext.minimum_version`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext.minimum_version) и [`SSLContext.maximum_version`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext.maximum_version). Поддерживаемые протоколы обозначены несколькими новыми флагами, такими как [`HAS_TLSv1_1`](https://python-all.ru/3.13/library/ssl.html#ssl.HAS_TLSv1_1). (Автор: Christian Heimes, [bpo-32609](https://python-all.ru/3.13/whatsnew/3.7.html).)651652Добавлены [`ssl.SSLContext.post_handshake_auth`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext.post_handshake_auth) для включения и [`ssl.SSLSocket.verify_client_post_handshake()`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLSocket.verify_client_post_handshake) для инициации аутентификации после рукопожатия TLS 1.3. (Автор: Christian Heimes, [gh-78851](https://python-all.ru/3.13/whatsnew/3.7.html).)653654### string655656[`string.Template`](https://python-all.ru/3.13/library/string.html#string.Template) теперь позволяет при необходимости изменять шаблон регулярного выражения для заполнителей в фигурных скобках и без них по отдельности. (Автор: Barry Warsaw, [bpo-1198569](https://python-all.ru/3.13/whatsnew/3.7.html).)657658### подпроцесс659660Функция [`subprocess.run()`](https://python-all.ru/3.13/library/subprocess.html#subprocess.run) принимает новый именованный аргумент *capture\_output*. Если он равен true, stdout и stderr будут захвачены. Это эквивалентно передаче [`subprocess.PIPE`](https://python-all.ru/3.13/library/subprocess.html#subprocess.PIPE) в качестве аргументов *stdout* и *stderr*. (Автор: Bo Bayles, [bpo-32102](https://python-all.ru/3.13/whatsnew/3.7.html).)661662Функция `subprocess.run` и конструктор [`subprocess.Popen`](https://python-all.ru/3.13/library/subprocess.html#subprocess.Popen) теперь принимают именованный аргумент *text* как псевдоним для *universal\_newlines*. (Автор: Andrew Clegg, [bpo-31756](https://python-all.ru/3.13/whatsnew/3.7.html).)663664В Windows значение по умолчанию для *close\_fds* было изменено с `False` на `True` при перенаправлении стандартных дескрипторов. Теперь можно установить *close\_fds* в true при перенаправлении стандартных дескрипторов. См. [`subprocess.Popen`](https://python-all.ru/3.13/library/subprocess.html#subprocess.Popen). Это означает, что *close\_fds* теперь по умолчанию равен `True` на всех поддерживаемых платформах. (Автор: Segev Finer, [bpo-19764](https://python-all.ru/3.13/whatsnew/3.7.html).)665666Модуль подпроцессов теперь более корректно обрабатывает [`KeyboardInterrupt`](https://python-all.ru/3.13/library/exceptions.html#KeyboardInterrupt) во время [`subprocess.call()`](https://python-all.ru/3.13/library/subprocess.html#subprocess.call), [`subprocess.run()`](https://python-all.ru/3.13/library/subprocess.html#subprocess.run) или в контекстном менеджере [`Popen`](https://python-all.ru/3.13/library/subprocess.html#subprocess.Popen). Он теперь ожидает короткое время завершения дочернего процесса, прежде чем продолжить обработку исключения `KeyboardInterrupt`. (Автор: Gregory P. Smith, [bpo-25942](https://python-all.ru/3.13/whatsnew/3.7.html).)667668### sys669670Новая функция-перехватчик [`sys.breakpointhook()`](https://python-all.ru/3.13/library/sys.html#sys.breakpointhook) вызывается встроенной функцией [`breakpoint()`](https://python-all.ru/3.13/library/functions.html#breakpoint). (Автор: Barry Warsaw в [bpo-31353](https://python-all.ru/3.13/whatsnew/3.7.html).)671672На Android новая функция [`sys.getandroidapilevel()`](https://python-all.ru/3.13/library/sys.html#sys.getandroidapilevel) возвращает версию Android API, заданную при сборке. (Автор: Victor Stinner в [bpo-28740](https://python-all.ru/3.13/whatsnew/3.7.html).)673674Новая функция [`sys.get_coroutine_origin_tracking_depth()`](https://python-all.ru/3.13/library/sys.html#sys.get_coroutine_origin_tracking_depth) возвращает текущую глубину отслеживания источника корутины, заданную новой функцией [`sys.set_coroutine_origin_tracking_depth()`](https://python-all.ru/3.13/library/sys.html#sys.set_coroutine_origin_tracking_depth). [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) был преобразован для использования этого нового API вместо устаревшего `sys.set_coroutine_wrapper()`. (Автор: Nathaniel J. Smith в [bpo-32591](https://python-all.ru/3.13/whatsnew/3.7.html).)675676### time677678[**PEP 564**](https://python-all.ru/3.13/whatsnew/3.7.html) добавляет шесть новых функций с разрешением в наносекунды в модуль [`time`](https://python-all.ru/3.13/library/time.html#module-time):679680- [`time.clock_gettime_ns()`](https://python-all.ru/3.13/library/time.html#time.clock_gettime_ns)681- [`time.clock_settime_ns()`](https://python-all.ru/3.13/library/time.html#time.clock_settime_ns)682- [`time.monotonic_ns()`](https://python-all.ru/3.13/library/time.html#time.monotonic_ns)683- [`time.perf_counter_ns()`](https://python-all.ru/3.13/library/time.html#time.perf_counter_ns)684- [`time.process_time_ns()`](https://python-all.ru/3.13/library/time.html#time.process_time_ns)685- [`time.time_ns()`](https://python-all.ru/3.13/library/time.html#time.time_ns)686687Добавлены новые идентификаторы часов:688689- [`time.CLOCK_BOOTTIME`](https://python-all.ru/3.13/library/time.html#time.CLOCK_BOOTTIME) (Linux): Аналогичен [`time.CLOCK_MONOTONIC`](https://python-all.ru/3.13/library/time.html#time.CLOCK_MONOTONIC), но также включает любое время, в которое система находилась в приостановленном состоянии.690- [`time.CLOCK_PROF`](https://python-all.ru/3.13/library/time.html#time.CLOCK_PROF) (FreeBSD, NetBSD и OpenBSD): Высокоточный таймер ЦП для каждого процесса.691- [`time.CLOCK_UPTIME`](https://python-all.ru/3.13/library/time.html#time.CLOCK_UPTIME) (FreeBSD, OpenBSD): Время, абсолютное значение которого равно времени работы системы без учёта приостановок, что обеспечивает точное измерение времени непрерывной работы.692693Новые функции [`time.thread_time()`](https://python-all.ru/3.13/library/time.html#time.thread_time) и [`time.thread_time_ns()`](https://python-all.ru/3.13/library/time.html#time.thread_time_ns) можно использовать для получения времени ЦП для каждого потока. (Автор: Antoine Pitrou в [bpo-32025](https://python-all.ru/3.13/whatsnew/3.7.html).)694695Новая функция [`time.pthread_getcpuclockid()`](https://python-all.ru/3.13/library/time.html#time.pthread_getcpuclockid) возвращает идентификатор часов времени ЦП для конкретного потока.696697### tkinter698699Новый класс [`tkinter.ttk.Spinbox`](https://python-all.ru/3.13/library/tkinter.ttk.html#tkinter.ttk.Spinbox) теперь доступен. (Автор: Alan Moore в [bpo-32585](https://python-all.ru/3.13/whatsnew/3.7.html).)700701### tracemalloc702703[`tracemalloc.Traceback`](https://python-all.ru/3.13/library/tracemalloc.html#tracemalloc.Traceback) теперь больше похож на обычные трассировки: сортирует фреймы от старых к новым. [`Traceback.format()`](https://python-all.ru/3.13/library/tracemalloc.html#tracemalloc.Traceback.format) теперь принимает отрицательное значение *limit*, обрезая результат до `abs(limit)` самых старых фреймов. Для получения прежнего поведения используйте новый аргумент *most\_recent\_first* функции `Traceback.format()`. (Автор: Jesse Bakker в [bpo-32121](https://python-all.ru/3.13/whatsnew/3.7.html).)704705### types706707Новые классы [`WrapperDescriptorType`](https://python-all.ru/3.13/library/types.html#types.WrapperDescriptorType), [`MethodWrapperType`](https://python-all.ru/3.13/library/types.html#types.MethodWrapperType), [`MethodDescriptorType`](https://python-all.ru/3.13/library/types.html#types.MethodDescriptorType) и [`ClassMethodDescriptorType`](https://python-all.ru/3.13/library/types.html#types.ClassMethodDescriptorType) теперь доступны. (Авторы: Manuel Krebber и Guido van Rossum в [bpo-29377](https://python-all.ru/3.13/whatsnew/3.7.html), а также Serhiy Storchaka в [bpo-32265](https://python-all.ru/3.13/whatsnew/3.7.html).)708709Новая функция [`types.resolve_bases()`](https://python-all.ru/3.13/library/types.html#types.resolve_bases) разрешает записи MRO динамически, как указано в [**PEP 560**](https://python-all.ru/3.13/whatsnew/3.7.html). (Автор: Ivan Levkivskyi в [bpo-32717](https://python-all.ru/3.13/whatsnew/3.7.html).)710711### unicodedata712713Внутренняя база данных [`unicodedata`](https://python-all.ru/3.13/library/unicodedata.html#module-unicodedata) обновлена до использования [Unicode 11](https://python-all.ru/3.13/whatsnew/3.7.html). (Автор: Benjamin Peterson.)714715### unittest716717Новый параметр командной строки `-k` позволяет фильтровать тесты по подстроке имени или шаблону, похожему на оболочку Unix. Например, `python -m unittest -k foo` запускает `foo_tests.SomeTest.test_something`, `bar_tests.SomeTest.test_foo`, но не `bar_tests.FooTest.test_something`. (Автор: Jonas Haag в [bpo-32071](https://python-all.ru/3.13/whatsnew/3.7.html).)718719### unittest.mock720721Атрибуты [`sentinel`](https://python-all.ru/3.13/library/unittest.mock.html#unittest.mock.sentinel) теперь сохраняют свою идентичность при [`copied`](https://python-all.ru/3.13/library/copy.html#module-copy) или [`pickled`](https://python-all.ru/3.13/library/pickle.html#module-pickle). (Автор: Serhiy Storchaka в [bpo-20804](https://python-all.ru/3.13/whatsnew/3.7.html).)722723Новая функция [`seal()`](https://python-all.ru/3.13/library/unittest.mock.html#unittest.mock.seal) позволяет запечатывать экземпляры [`Mock`](https://python-all.ru/3.13/library/unittest.mock.html#unittest.mock.Mock), что запретит дальнейшее создание атрибутов-заглушек. Запечатывание применяется рекурсивно ко всем атрибутам, которые сами являются заглушками. (Автор: Mario Corchero в [bpo-30541](https://python-all.ru/3.13/whatsnew/3.7.html).)724725### urllib.parse726727[`urllib.parse.quote()`](https://python-all.ru/3.13/library/urllib.parse.html#urllib.parse.quote) обновлён с [**RFC 2396**](https://python-all.ru/3.13/whatsnew/3.7.html) до [**RFC 3986**](https://python-all.ru/3.13/whatsnew/3.7.html), добавляя `~` в набор символов, которые по умолчанию никогда не заключаются в кавычки. (Авторы: Christian Theune и Ratnadeep Debnath в [bpo-16285](https://python-all.ru/3.13/whatsnew/3.7.html).)728729### uu730731Функция `uu.encode()` теперь принимает необязательный именованный аргумент *backtick*. Если он равен true, нули представляются символом `` '`' `` вместо пробелов. (Автор: Xiang Zhang в [bpo-30103](https://python-all.ru/3.13/whatsnew/3.7.html).)732733### uuid734735Новый атрибут [`UUID.is_safe`](https://python-all.ru/3.13/library/uuid.html#uuid.UUID.is_safe) передаёт от платформы информацию о том, генерируются ли UUID-идентификаторы методом, безопасным для многопроцессорности. (Автор: Barry Warsaw в [bpo-22807](https://python-all.ru/3.13/whatsnew/3.7.html).)736737[`uuid.getnode()`](https://python-all.ru/3.13/library/uuid.html#uuid.getnode) теперь отдаёт предпочтение глобально управляемым MAC-адресам перед локально управляемыми. Это обеспечивает лучшую гарантию глобальной уникальности UUID, возвращаемых из [`uuid.uuid1()`](https://python-all.ru/3.13/library/uuid.html#uuid.uuid1). Если доступны только локально управляемые MAC-адреса, возвращается первый такой найденный адрес. (Автор: Barry Warsaw, [bpo-32107](https://python-all.ru/3.13/whatsnew/3.7.html))738739### warnings740741Инициализация фильтров предупреждений по умолчанию изменилась следующим образом:742743- Предупреждения, включённые через параметры командной строки (включая параметры для [`-b`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-b) и новый специфичный для CPython параметр [`-X`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-X) `dev`), всегда передаются механизму предупреждений через атрибут [`sys.warnoptions`](https://python-all.ru/3.13/library/sys.html#sys.warnoptions).744- Фильтры предупреждений, заданные через командную строку или окружение, теперь имеют следующий порядок приоритета:745746  - фильтр `BytesWarning` для [`-b`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-b) (или `-bb`)747  - любые фильтры, указанные с параметром [`-W`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-W)748  - любые фильтры, указанные через переменную окружения [`PYTHONWARNINGS`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONWARNINGS)749  - любые другие специфичные для CPython фильтры (например, фильтр `default`, добавленный для нового режима `-X dev`)750  - любые неявные фильтры, определённые непосредственно механизмом предупреждений751- в [отладочных сборках CPython](https://python-all.ru/3.13/using/configure.html#debug-build), все предупреждения теперь отображаются по умолчанию (список неявных фильтров пуст)752753(Авторы: Nick Coghlan и Victor Stinner в [bpo-20361](https://python-all.ru/3.13/whatsnew/3.7.html), [bpo-32043](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-32230](https://python-all.ru/3.13/whatsnew/3.7.html).)754755Предупреждения об устаревании снова отображаются по умолчанию в однофайловых скриптах и в интерактивной оболочке. Подробнее см. [PEP 565: Show DeprecationWarning in \_\_main\_\_](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep565). (Автор: Nick Coghlan в [bpo-31975](https://python-all.ru/3.13/whatsnew/3.7.html).)756757### xml758759В качестве меры защиты от DTD и получения внешних сущностей модули [`xml.dom.minidom`](https://python-all.ru/3.13/library/xml.dom.minidom.html#module-xml.dom.minidom) и [`xml.sax`](https://python-all.ru/3.13/library/xml.sax.html#module-xml.sax) больше не обрабатывают внешние сущности по умолчанию. (Автор: Christian Heimes в [gh-61441](https://python-all.ru/3.13/whatsnew/3.7.html).)760761### xml.etree762763Предикаты [ElementPath](https://python-all.ru/3.13/library/xml.etree.elementtree.html#elementtree-xpath) в методах `find()` теперь могут сравнивать текст текущего узла с `[. = "text"]`, а не только текст в дочерних узлах. Предикаты также допускают добавление пробелов для улучшения читаемости. (Автор: Stefan Behnel в [bpo-31648](https://python-all.ru/3.13/whatsnew/3.7.html).)764765### xmlrpc.server766767`SimpleXMLRPCDispatcher.register_function()` теперь можно использовать как декоратор. (Автор: Xiang Zhang в [bpo-7769](https://python-all.ru/3.13/whatsnew/3.7.html).)768769### zipapp770771Функция [`create_archive()`](https://python-all.ru/3.13/library/zipapp.html#zipapp.create_archive) теперь принимает необязательный аргумент *filter*, позволяющий пользователю выбирать, какие файлы должны быть включены в архив. (Автор: Irmen de Jong в [bpo-31072](https://python-all.ru/3.13/whatsnew/3.7.html).)772773Функция [`create_archive()`](https://python-all.ru/3.13/library/zipapp.html#zipapp.create_archive) теперь принимает необязательный аргумент *compressed* для создания сжатого архива. Также добавлен параметр командной строки `--compress` для поддержки сжатия. (Автор: Zhiming Wang в [bpo-31638](https://python-all.ru/3.13/whatsnew/3.7.html).)774775### zipfile776777[`ZipFile`](https://python-all.ru/3.13/library/zipfile.html#zipfile.ZipFile) теперь принимает новый параметр *compresslevel* для управления уровнем сжатия. (Автор: Bo Bayles в [bpo-21417](https://python-all.ru/3.13/whatsnew/3.7.html).)778779Поддиректории в архивах, создаваемых `ZipFile`, теперь сохраняются в алфавитном порядке. (Автор: Bernhard M. Wiedemann в [bpo-30693](https://python-all.ru/3.13/whatsnew/3.7.html).)780781## Изменения C API782783Реализован новый API для локального хранилища потока. Обзор см. в [PEP 539: Новый C API для локального хранилища потока](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep539), а полную справку – в [API для локального хранилища потока (TSS)](https://python-all.ru/3.13/c-api/init.html#thread-specific-storage-api). (Автор: Masayuki Yamamoto, [bpo-25658](https://python-all.ru/3.13/whatsnew/3.7.html).)784785Новая функциональность [контекстных переменных](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep567) предоставляет ряд [новых C API](https://python-all.ru/3.13/c-api/contextvars.html#contextvarsobjects).786787Новая функция [`PyImport_GetModule()`](https://python-all.ru/3.13/c-api/import.html#c.PyImport_GetModule) возвращает ранее импортированный модуль с заданным именем. (Автор: Eric Snow в [bpo-28411](https://python-all.ru/3.13/whatsnew/3.7.html).)788789Новый макрос [`Py_RETURN_RICHCOMPARE`](https://python-all.ru/3.13/c-api/typeobj.html#c.Py_RETURN_RICHCOMPARE) упрощает написание функций расширенного сравнения. (Автор: Petr Victorin в [bpo-23699](https://python-all.ru/3.13/whatsnew/3.7.html).)790791Новый макрос [`Py_UNREACHABLE`](https://python-all.ru/3.13/c-api/intro.html#c.Py_UNREACHABLE) можно использовать для пометки недостижимых участков кода. (Автор: Barry Warsaw в [bpo-31338](https://python-all.ru/3.13/whatsnew/3.7.html).)792793[`tracemalloc`](https://python-all.ru/3.13/library/tracemalloc.html#module-tracemalloc) теперь предоставляет C API через новые функции [`PyTraceMalloc_Track()`](https://python-all.ru/3.13/c-api/memory.html#c.PyTraceMalloc_Track) и [`PyTraceMalloc_Untrack()`](https://python-all.ru/3.13/c-api/memory.html#c.PyTraceMalloc_Untrack). (Автор: Victor Stinner в [bpo-30054](https://python-all.ru/3.13/whatsnew/3.7.html).)794795Новые статические маркеры [import\_\_find\_\_load\_\_start](https://python-all.ru/3.13/howto/instrumentation.html#static-markers) и [import\_\_find\_\_load\_\_done](https://python-all.ru/3.13/howto/instrumentation.html#static-markers) можно использовать для трассировки импорта модулей. (Автор: Christian Heimes в [bpo-31574](https://python-all.ru/3.13/whatsnew/3.7.html).)796797Поля `name` и `doc` структур [`PyMemberDef`](https://python-all.ru/3.13/c-api/structures.html#c.PyMemberDef), [`PyGetSetDef`](https://python-all.ru/3.13/c-api/structures.html#c.PyGetSetDef), [`PyStructSequence_Field`](https://python-all.ru/3.13/c-api/tuple.html#c.PyStructSequence_Field), [`PyStructSequence_Desc`](https://python-all.ru/3.13/c-api/tuple.html#c.PyStructSequence_Desc), и `wrapperbase` теперь имеют тип `const char *` вместо `char *`. (Автор: Serhiy Storchaka, [bpo-28761](https://python-all.ru/3.13/whatsnew/3.7.html).)798799Результат [`PyUnicode_AsUTF8AndSize()`](https://python-all.ru/3.13/c-api/unicode.html#c.PyUnicode_AsUTF8AndSize) и [`PyUnicode_AsUTF8()`](https://python-all.ru/3.13/c-api/unicode.html#c.PyUnicode_AsUTF8) теперь имеет тип `const char *` вместо `char *`. (Автор: Serhiy Storchaka, [bpo-28769](https://python-all.ru/3.13/whatsnew/3.7.html).)800801Результат [`PyMapping_Keys()`](https://python-all.ru/3.13/c-api/mapping.html#c.PyMapping_Keys), [`PyMapping_Values()`](https://python-all.ru/3.13/c-api/mapping.html#c.PyMapping_Values) и [`PyMapping_Items()`](https://python-all.ru/3.13/c-api/mapping.html#c.PyMapping_Items) теперь всегда список, а не список или кортеж. (Автор: Oren Milman, [bpo-28280](https://python-all.ru/3.13/whatsnew/3.7.html).)802803Добавлены функции [`PySlice_Unpack()`](https://python-all.ru/3.13/c-api/slice.html#c.PySlice_Unpack) и [`PySlice_AdjustIndices()`](https://python-all.ru/3.13/c-api/slice.html#c.PySlice_AdjustIndices). (Автор: Serhiy Storchaka, [bpo-27867](https://python-all.ru/3.13/whatsnew/3.7.html).)804805[`PyOS_AfterFork()`](https://python-all.ru/3.13/c-api/sys.html#c.PyOS_AfterFork) устарела в пользу новых функций [`PyOS_BeforeFork()`](https://python-all.ru/3.13/c-api/sys.html#c.PyOS_BeforeFork), [`PyOS_AfterFork_Parent()`](https://python-all.ru/3.13/c-api/sys.html#c.PyOS_AfterFork_Parent) и [`PyOS_AfterFork_Child()`](https://python-all.ru/3.13/c-api/sys.html#c.PyOS_AfterFork_Child). (Автор: Antoine Pitrou, [bpo-16500](https://python-all.ru/3.13/whatsnew/3.7.html).)806807Синглтон `PyExc_RecursionErrorInst`, входивший в публичный API, удалён, поскольку его элементы никогда не очищались, что могло приводить к segfault при завершении работы интерпретатора. Автор: Xavier de Gaye, [bpo-22898](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-30697](https://python-all.ru/3.13/whatsnew/3.7.html).808809Добавлена поддержка часовых поясов в C API с помощью конструкторов часовых поясов [`PyTimeZone_FromOffset()`](https://python-all.ru/3.13/c-api/datetime.html#c.PyTimeZone_FromOffset) и [`PyTimeZone_FromOffsetAndName()`](https://python-all.ru/3.13/c-api/datetime.html#c.PyTimeZone_FromOffsetAndName), а также доступ к синглтону UTC через [`PyDateTime_TimeZone_UTC`](https://python-all.ru/3.13/c-api/datetime.html#c.PyDateTime_TimeZone_UTC). Автор: Paul Ganssle, [bpo-10381](https://python-all.ru/3.13/whatsnew/3.7.html).810811Тип результатов `PyThread_start_new_thread()` и `PyThread_get_thread_ident()`, а также параметр *id* функции [`PyThreadState_SetAsyncExc()`](https://python-all.ru/3.13/c-api/init.html#c.PyThreadState_SetAsyncExc) изменился с long на unsigned long. (Автор: Serhiy Storchaka, [bpo-6532](https://python-all.ru/3.13/whatsnew/3.7.html).)812813[`PyUnicode_AsWideCharString()`](https://python-all.ru/3.13/c-api/unicode.html#c.PyUnicode_AsWideCharString) теперь вызывает исключение [`ValueError`](https://python-all.ru/3.13/library/exceptions.html#ValueError), если второй аргумент равен `NULL`, а строка wchar\_t\* содержит нулевые символы. (Автор: Serhiy Storchaka, [bpo-30708](https://python-all.ru/3.13/whatsnew/3.7.html).)814815Изменения в последовательности запуска и управлении динамическими распределителями памяти означают, что давно документированное требование вызывать [`Py_Initialize()`](https://python-all.ru/3.13/c-api/init.html#c.Py_Initialize) перед вызовом большинства функций API языка C теперь соблюдается более строго, и его нарушение может привести к ошибке сегментации во встраиваемых приложениях. Подробнее см. раздел [Переход на Python 3.7](https://python-all.ru/3.13/whatsnew/3.7.html#porting-to-python-37) в этом документе и раздел [Перед инициализацией Python](https://python-all.ru/3.13/c-api/init.html#pre-init-safe) в документации API языка C.816817Новая функция [`PyInterpreterState_GetID()`](https://python-all.ru/3.13/c-api/init.html#c.PyInterpreterState_GetID) возвращает уникальный идентификатор для заданного интерпретатора. (Автор: Eric Snow, [bpo-29102](https://python-all.ru/3.13/whatsnew/3.7.html).)818819[`Py_DecodeLocale()`](https://python-all.ru/3.13/c-api/sys.html#c.Py_DecodeLocale), [`Py_EncodeLocale()`](https://python-all.ru/3.13/c-api/sys.html#c.Py_EncodeLocale) теперь используют кодировку UTF-8, когда включён [режим UTF-8](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep540). (Автор: Victor Stinner, [bpo-29240](https://python-all.ru/3.13/whatsnew/3.7.html).)820821[`PyUnicode_DecodeLocaleAndSize()`](https://python-all.ru/3.13/c-api/unicode.html#c.PyUnicode_DecodeLocaleAndSize) и [`PyUnicode_EncodeLocale()`](https://python-all.ru/3.13/c-api/unicode.html#c.PyUnicode_EncodeLocale) теперь используют кодировку текущей локали для обработчика ошибок `surrogateescape`. (Автор: Victor Stinner, [bpo-29240](https://python-all.ru/3.13/whatsnew/3.7.html).)822823Параметры *start* и *end* функции [`PyUnicode_FindChar()`](https://python-all.ru/3.13/c-api/unicode.html#c.PyUnicode_FindChar) теперь ведут себя как срезы строк. (Автор: Xiang Zhang, [bpo-28822](https://python-all.ru/3.13/whatsnew/3.7.html).)824825## Изменения сборки826827Поддержка сборки `--without-threads` удалена. Модуль [`threading`](https://python-all.ru/3.13/library/threading.html#module-threading) теперь всегда доступен. (Автор: Antoine Pitrou, [bpo-31370](https://python-all.ru/3.13/whatsnew/3.7.html).)828829Полная копия libffi больше не поставляется для сборки модуля [`_ctypes`](https://python-all.ru/3.13/library/ctypes.html#module-ctypes) на не-OSX UNIX платформах. Теперь для сборки `_ctypes` на таких платформах требуется установленная копия libffi. (Автор: Zachary Ware, [bpo-27979](https://python-all.ru/3.13/whatsnew/3.7.html).)830831Процесс сборки в Windows больше не зависит от Subversion для получения внешних исходников; вместо этого используется скрипт Python для загрузки zip-файлов с GitHub. Если Python 3.6 не найден в системе (через `py -3.6`), для этой цели используется NuGet для загрузки копии 32-битной версии Python. (Автор: Zachary Ware, [bpo-30450](https://python-all.ru/3.13/whatsnew/3.7.html).)832833Модуль [`ssl`](https://python-all.ru/3.13/library/ssl.html#module-ssl) требует OpenSSL 1.0.2 или совместимый с 1.1 libssl. OpenSSL 1.0.1 достиг конца срока поддержки 31 декабря 2016 года и больше не поддерживается. LibreSSL также временно не поддерживается. Версии LibreSSL до 2.6.4 не содержат необходимых API OpenSSL 1.0.2.834835## Оптимизации836837Накладные расходы на вызов многих методов различных классов стандартной библиотеки, реализованных на C, значительно снижены за счёт переноса большего количества кода на использование соглашения `METH_FASTCALL`. (Автор: Victor Stinner, [bpo-29300](https://python-all.ru/3.13/whatsnew/3.7.html), [bpo-29507](https://python-all.ru/3.13/whatsnew/3.7.html), [bpo-29452](https://python-all.ru/3.13/whatsnew/3.7.html), и [bpo-29286](https://python-all.ru/3.13/whatsnew/3.7.html).)838839Различные оптимизации сократили время запуска Python на 10% на Linux и до 30% на macOS. (Авторы: Victor Stinner, INADA Naoki, [bpo-29585](https://python-all.ru/3.13/whatsnew/3.7.html), и Ivan Levkivskyi, [bpo-31333](https://python-all.ru/3.13/whatsnew/3.7.html).)840841Вызовы методов теперь до 20% быстрее благодаря изменениям в байт-коде, которые позволяют не создавать экземпляры связанных методов. (Авторы: Yury Selivanov и INADA Naoki, [bpo-26110](https://python-all.ru/3.13/whatsnew/3.7.html).)842843Модуль [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) получил ряд значительных оптимизаций для часто используемых функций:844845- Функция [`asyncio.get_event_loop()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.get_event_loop) была переписана на C, что сделало её до 15 раз быстрее. (Автор: Yury Selivanov, [bpo-32296](https://python-all.ru/3.13/whatsnew/3.7.html).)846- Управление колбэками [`asyncio.Future`](https://python-all.ru/3.13/library/asyncio-future.html#asyncio.Future) оптимизировано. (Автор: Yury Selivanov, [bpo-32348](https://python-all.ru/3.13/whatsnew/3.7.html).)847- [`asyncio.gather()`](https://python-all.ru/3.13/library/asyncio-task.html#asyncio.gather) теперь до 15% быстрее. (Автор: Yury Selivanov, [bpo-32355](https://python-all.ru/3.13/whatsnew/3.7.html).)848- [`asyncio.sleep()`](https://python-all.ru/3.13/library/asyncio-task.html#asyncio.sleep) теперь до 2 раз быстрее, когда аргумент *delay* равен нулю или отрицателен. (Автор: Andrew Svetlov, [bpo-32351](https://python-all.ru/3.13/whatsnew/3.7.html).)849- Накладные расходы, связанные с режимом отладки asyncio, снижены. (Автор: Antoine Pitrou, [bpo-31970](https://python-all.ru/3.13/whatsnew/3.7.html).)850851В результате [работы над PEP 560](https://python-all.ru/3.13/whatsnew/3.7.html#whatsnew37-pep560), время импорта [`typing`](https://python-all.ru/3.13/library/typing.html#module-typing) сократилось в 7 раз, и многие операции с типами теперь выполняются быстрее. (Автор: Ivan Levkivskyi, [bpo-32226](https://python-all.ru/3.13/whatsnew/3.7.html).)852853[`sorted()`](https://python-all.ru/3.13/library/functions.html#sorted) и [`list.sort()`](https://python-all.ru/3.13/library/stdtypes.html#list.sort) оптимизированы для типичных случаев и стали быстрее на 40–75%. (Автор: Elliot Gorokhovsky, [bpo-28685](https://python-all.ru/3.13/whatsnew/3.7.html).)854855[`dict.copy()`](https://python-all.ru/3.13/library/stdtypes.html#dict.copy) теперь до 5.5 раз быстрее. (Автор: Yury Selivanov, [bpo-31179](https://python-all.ru/3.13/whatsnew/3.7.html).)856857[`hasattr()`](https://python-all.ru/3.13/library/functions.html#hasattr) и [`getattr()`](https://python-all.ru/3.13/library/functions.html#getattr) теперь примерно в 4 раза быстрее, когда *name* не найден, а *obj* не переопределяет [`object.__getattr__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__getattr__) или [`object.__getattribute__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__getattribute__). (Автор: INADA Naoki, [bpo-32544](https://python-all.ru/3.13/whatsnew/3.7.html).)858859Поиск некоторых символов Юникода (например, украинской заглавной «Є») в строке был до 25 раз медленнее, чем поиск других символов. Теперь в худшем случае он медленнее всего в 3 раза. (Автор: Serhiy Storchaka, [bpo-24821](https://python-all.ru/3.13/whatsnew/3.7.html).)860861Фабрика [`collections.namedtuple()`](https://python-all.ru/3.13/library/collections.html#collections.namedtuple) была переписана, чтобы создание именованных кортежей стало в 4–6 раз быстрее. (Автор: Jelle Zijlstra с последующими улучшениями от INADA Naoki, Serhiy Storchaka и Raymond Hettinger в [bpo-28638](https://python-all.ru/3.13/whatsnew/3.7.html).)862863[`datetime.date.fromordinal()`](https://python-all.ru/3.13/library/datetime.html#datetime.date.fromordinal) и [`datetime.date.fromtimestamp()`](https://python-all.ru/3.13/library/datetime.html#datetime.date.fromtimestamp) теперь работают до 30% быстрее в типичных случаях. (Автор: Paul Ganssle в [bpo-32403](https://python-all.ru/3.13/whatsnew/3.7.html).)864865Функция [`os.fwalk()`](https://python-all.ru/3.13/library/os.html#os.fwalk) теперь работает до 2 раз быстрее благодаря использованию [`os.scandir()`](https://python-all.ru/3.13/library/os.html#os.scandir). (Автор: Serhiy Storchaka в [bpo-25996](https://python-all.ru/3.13/whatsnew/3.7.html).)866867Скорость функции [`shutil.rmtree()`](https://python-all.ru/3.13/library/shutil.html#shutil.rmtree) улучшена на 20–40% благодаря использованию функции [`os.scandir()`](https://python-all.ru/3.13/library/os.html#os.scandir). (Автор: Serhiy Storchaka в [bpo-28564](https://python-all.ru/3.13/whatsnew/3.7.html).)868869Оптимизировано регистронезависимое сопоставление и поиск [`regular expressions`](https://python-all.ru/3.13/library/re.html#module-re). Поиск некоторых шаблонов теперь может быть до 20 раз быстрее. (Автор: Serhiy Storchaka в [bpo-30285](https://python-all.ru/3.13/whatsnew/3.7.html).)870871[`re.compile()`](https://python-all.ru/3.13/library/re.html#re.compile) теперь преобразует параметр `flags` в объект int, если он `RegexFlag`. Теперь он так же быстр, как Python 3.5, и примерно на 10% быстрее Python 3.6 в зависимости от шаблона. (Автор: INADA Naoki в [bpo-31671](https://python-all.ru/3.13/whatsnew/3.7.html).)872873Методы [`modify()`](https://python-all.ru/3.13/library/selectors.html#selectors.BaseSelector.modify) классов [`selectors.EpollSelector`](https://python-all.ru/3.13/library/selectors.html#selectors.EpollSelector), [`selectors.PollSelector`](https://python-all.ru/3.13/library/selectors.html#selectors.PollSelector) и [`selectors.DevpollSelector`](https://python-all.ru/3.13/library/selectors.html#selectors.DevpollSelector) могут быть примерно на 10% быстрее при высокой нагрузке. (Автор: Giampaolo Rodola’ в [bpo-30014](https://python-all.ru/3.13/whatsnew/3.7.html))874875Свёртка констант перенесена из peephole-оптимизатора в новый AST-оптимизатор, который способен выполнять оптимизации более согласованно. (Авторы: Eugene Toder и INADA Naoki в [bpo-29469](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-11549](https://python-all.ru/3.13/whatsnew/3.7.html).)876877Большинство функций и методов в [`abc`](https://python-all.ru/3.13/library/abc.html#module-abc) переписаны на C. Это делает создание абстрактных базовых классов и вызов [`isinstance()`](https://python-all.ru/3.13/library/functions.html#isinstance) и [`issubclass()`](https://python-all.ru/3.13/library/functions.html#issubclass) для них в 1.5 раза быстрее. Это также сокращает время запуска Python до 10%. (Авторы: Ivan Levkivskyi и INADA Naoki в [bpo-31333](https://python-all.ru/3.13/whatsnew/3.7.html))878879Значительное ускорение альтернативных конструкторов для [`datetime.date`](https://python-all.ru/3.13/library/datetime.html#datetime.date) и [`datetime.datetime`](https://python-all.ru/3.13/library/datetime.html#datetime.datetime) за счёт использования быстрых конструкторов, когда не создаются подклассы. (Автор: Paul Ganssle в [bpo-32403](https://python-all.ru/3.13/whatsnew/3.7.html))880881Скорость сравнения экземпляров [`array.array`](https://python-all.ru/3.13/library/array.html#array.array) значительно улучшена в определённых случаях. Теперь при сравнении массивов, содержащих значения одного целочисленного типа, скорость повышена в 10–70 раз. (Автор: Adrian Wielgosik в [bpo-24700](https://python-all.ru/3.13/whatsnew/3.7.html).)882883Функции [`math.erf()`](https://python-all.ru/3.13/library/math.html#math.erf) и [`math.erfc()`](https://python-all.ru/3.13/library/math.html#math.erfc) теперь на большинстве платформ используют (более быструю) реализацию из библиотеки C. (Автор: Serhiy Storchaka в [bpo-26121](https://python-all.ru/3.13/whatsnew/3.7.html).)884885## Прочие изменения в реализации CPython886887- Хуки трассировки теперь могут отказываться от получения событий `line` и подписываться на получение событий `opcode` от интерпретатора, устанавливая соответствующие новые атрибуты [`f_trace_lines`](https://python-all.ru/3.13/reference/datamodel.html#frame.f_trace_lines) и [`f_trace_opcodes`](https://python-all.ru/3.13/reference/datamodel.html#frame.f_trace_opcodes) на трассируемом фрейме. (Автор: Nick Coghlan в [bpo-31344](https://python-all.ru/3.13/whatsnew/3.7.html).)888- Исправлены некоторые проблемы согласованности атрибутов модулей пространства имён. Объекты модулей пространства имён теперь имеют `__file__`, установленный в `None` (ранее не установлен), и их `__spec__.origin` также установлен в `None` (ранее строка `"namespace"`). См. [bpo-32305](https://python-all.ru/3.13/whatsnew/3.7.html). Кроме того, `__spec__.loader` объекта модуля пространства имён установлен в то же значение, что и `__loader__` (ранее первый был установлен в `None`). См. [bpo-32303](https://python-all.ru/3.13/whatsnew/3.7.html).889- Словарь [`locals()`](https://python-all.ru/3.13/library/functions.html#locals) теперь отображается в лексическом порядке, в котором были определены переменные. Ранее порядок был неопределённым. (Автор: Raymond Hettinger в [bpo-32690](https://python-all.ru/3.13/whatsnew/3.7.html).)890- Команда `distutils` `upload` больше не пытается заменять символы конца строки CR на CRLF. Это исправляет проблему повреждения sdists, которые заканчивались байтом, эквивалентным CR. (Автор: Bo Bayles в [bpo-32304](https://python-all.ru/3.13/whatsnew/3.7.html).)891892## Устаревшее поведение Python893894Выражения yield (как предложения `yield`, так и `yield from`) теперь устарели в включениях и генераторных выражениях (за исключением итерируемого выражения в крайнем левом предложении `for`). Это гарантирует, что включения всегда немедленно возвращают контейнер соответствующего типа (вместо возможного возврата объекта [итератора-генератора](https://python-all.ru/3.13/glossary.html#term-generator-iterator)), а генераторные выражения не будут пытаться смешивать свой неявный вывод с выводом от любых явных выражений yield. В Python 3.7 такие выражения при компиляции выдают [`DeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#DeprecationWarning), в Python 3.8 это будет [`SyntaxError`](https://python-all.ru/3.13/library/exceptions.html#SyntaxError). (Автор: Serhiy Storchaka в [bpo-10544](https://python-all.ru/3.13/whatsnew/3.7.html).)895896Возврат подкласса [`complex`](https://python-all.ru/3.13/library/functions.html#complex) из [`object.__complex__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__complex__) устарел и в будущих версиях Python станет ошибкой. Это делает `__complex__()` согласованным с [`object.__int__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__int__) и [`object.__float__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__float__). (Автор: Serhiy Storchaka в [bpo-28894](https://python-all.ru/3.13/whatsnew/3.7.html).)897898## Устаревшие модули, функции и методы Python899900### aifc901902`aifc.openfp()` устарел и будет удалён в Python 3.9. Используйте `aifc.open()` вместо него. (Автор: Brian Curtin, [bpo-31985](https://python-all.ru/3.13/whatsnew/3.7.html).)903904### asyncio905906Поддержка прямого `await`-инга экземпляров [`asyncio.Lock`](https://python-all.ru/3.13/library/asyncio-sync.html#asyncio.Lock) и других примитивов синхронизации asyncio устарела. Для получения и освобождения ресурса синхронизации необходимо использовать асинхронный менеджер контекста. (Автор: Andrew Svetlov в [bpo-32253](https://python-all.ru/3.13/whatsnew/3.7.html).)907908Методы `asyncio.Task.current_task()` и `asyncio.Task.all_tasks()` устарели. (Автор: Andrew Svetlov в [bpo-32250](https://python-all.ru/3.13/whatsnew/3.7.html).)909910### collections911912В Python 3.8 абстрактные базовые классы из [`collections.abc`](https://python-all.ru/3.13/library/collections.abc.html#module-collections.abc) больше не будут доступны в обычном модуле [`collections`](https://python-all.ru/3.13/library/collections.html#module-collections). Это поможет создать более чёткое различие между конкретными классами и абстрактными базовыми классами. (Автор: Serhiy Storchaka в [bpo-25988](https://python-all.ru/3.13/whatsnew/3.7.html).)913914### dbm915916[`dbm.dumb`](https://python-all.ru/3.13/library/dbm.html#module-dbm.dumb) теперь поддерживает чтение файлов только для чтения и больше не записывает индексный файл, если он не был изменён. Теперь выводится предупреждение об устаревании, если индексный файл отсутствует и воссоздаётся в режимах `'r'` и `'w'` (в будущих версиях Python это станет ошибкой). (Автор: Serhiy Storchaka в [bpo-28847](https://python-all.ru/3.13/whatsnew/3.7.html).)917918### enum919920В Python 3.8 попытка проверить наличие объектов, не являющихся Enum, в классах [`Enum`](https://python-all.ru/3.13/library/enum.html#enum.Enum) будет вызывать [`TypeError`](https://python-all.ru/3.13/library/exceptions.html#TypeError) (например, `1 in Color`); аналогично, попытка проверить наличие объектов, не являющихся Flag, у элемента [`Flag`](https://python-all.ru/3.13/library/enum.html#enum.Flag) будет вызывать `TypeError` (например, `1 in Perm.RW`); в настоящее время обе операции вместо этого возвращают [`False`](https://python-all.ru/3.13/library/constants.html#False). (Автор: Ethan Furman в [bpo-33217](https://python-all.ru/3.13/whatsnew/3.7.html).)921922### gettext923924Использование нецелочисленного значения для выбора формы множественного числа в [`gettext`](https://python-all.ru/3.13/library/gettext.html#module-gettext) теперь устарело. Оно никогда не работало корректно. (Автор: Serhiy Storchaka в [bpo-28692](https://python-all.ru/3.13/whatsnew/3.7.html).)925926### importlib927928Методы `MetaPathFinder.find_module()` (заменены на [`MetaPathFinder.find_spec()`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.MetaPathFinder.find_spec)) и `PathEntryFinder.find_loader()` (заменены на [`PathEntryFinder.find_spec()`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.PathEntryFinder.find_spec)) оба устаревших в Python 3.4 теперь генерируют [`DeprecationWarning`](https://python-all.ru/3.13/library/exceptions.html#DeprecationWarning). (Автор: Matthias Bussonnier, [bpo-29576](https://python-all.ru/3.13/whatsnew/3.7.html).)929930Абстрактный базовый класс [`importlib.abc.ResourceLoader`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.ResourceLoader) устарел в пользу [`importlib.abc.ResourceReader`](https://python-all.ru/3.13/library/importlib.html#importlib.abc.ResourceReader).931932### locale933934`locale.format()` устарел, используйте [`locale.format_string()`](https://python-all.ru/3.13/library/locale.html#locale.format_string) вместо него. (Автор: Garvit, [bpo-10379](https://python-all.ru/3.13/whatsnew/3.7.html).)935936### macpath937938`macpath` теперь устарел и будет удалён в Python 3.8. (Автор: Chi Hsuan Yen, [bpo-9850](https://python-all.ru/3.13/whatsnew/3.7.html).)939940### threading941942`dummy_threading` и `_dummy_thread` устарели. Больше невозможно собрать Python с отключённой поддержкой потоков. Используйте [`threading`](https://python-all.ru/3.13/library/threading.html#module-threading) вместо них. (Автор: Antoine Pitrou, [bpo-31370](https://python-all.ru/3.13/whatsnew/3.7.html).)943944### socket945946Тихая обрезка значения аргумента в [`socket.htons()`](https://python-all.ru/3.13/library/socket.html#socket.htons) и [`socket.ntohs()`](https://python-all.ru/3.13/library/socket.html#socket.ntohs) устарела. В будущих версиях Python, если переданный аргумент превышает 16 бит, будет возбуждаться исключение. (Автор: Oren Milman, [bpo-28332](https://python-all.ru/3.13/whatsnew/3.7.html).)947948### ssl949950`ssl.wrap_socket()` устарел. Используйте [`ssl.SSLContext.wrap_socket()`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext.wrap_socket) вместо него. (Автор: Christian Heimes, [bpo-28124](https://python-all.ru/3.13/whatsnew/3.7.html).)951952### sunau953954`sunau.openfp()` устарел и будет удалён в Python 3.9. Используйте `sunau.open()` вместо него. (Автор: Brian Curtin, [bpo-31985](https://python-all.ru/3.13/whatsnew/3.7.html).)955956### sys957958`sys.set_coroutine_wrapper()` и `sys.get_coroutine_wrapper()` устарели.959960Незадокументированная функция `sys.callstats()` устарела и будет удалена в одной из будущих версий Python. (Автор: Victor Stinner, [bpo-28799](https://python-all.ru/3.13/whatsnew/3.7.html).)961962### wave963964`wave.openfp()` устарел и будет удалён в Python 3.9. Используйте [`wave.open()`](https://python-all.ru/3.13/library/wave.html#wave.open) вместо него. (Автор: Brian Curtin, [bpo-31985](https://python-all.ru/3.13/whatsnew/3.7.html).)965966## Устаревшие функции и типы C API967968Функция [`PySlice_GetIndicesEx()`](https://python-all.ru/3.13/c-api/slice.html#c.PySlice_GetIndicesEx) устарела и заменена макросом, если `Py_LIMITED_API` не установлен или установлен в значение в диапазоне от `0x03050400` до `0x03060000` (не включая), или равен `0x03060100` или больше. (Автор: Serhiy Storchaka, [bpo-27867](https://python-all.ru/3.13/whatsnew/3.7.html).)969970[`PyOS_AfterFork()`](https://python-all.ru/3.13/c-api/sys.html#c.PyOS_AfterFork) устарел. Используйте [`PyOS_BeforeFork()`](https://python-all.ru/3.13/c-api/sys.html#c.PyOS_BeforeFork), [`PyOS_AfterFork_Parent()`](https://python-all.ru/3.13/c-api/sys.html#c.PyOS_AfterFork_Parent) или [`PyOS_AfterFork_Child()`](https://python-all.ru/3.13/c-api/sys.html#c.PyOS_AfterFork_Child) вместо него. (Автор: Antoine Pitrou, [bpo-16500](https://python-all.ru/3.13/whatsnew/3.7.html).)971972## Удаление поддержки платформ973974- FreeBSD 9 и более старые версии больше официально не поддерживаются.975- Для полной поддержки Юникода, в том числе в модулях расширения, на платформах \*nix теперь требуется предоставлять хотя бы одну из `C.UTF-8` (полная локаль), `C.utf8` (полная локаль) или `UTF-8` (локаль только `LC_CTYPE`) в качестве альтернативы устаревшей локали `C` на основе `ASCII`.976- OpenSSL 0.9.8 и 1.0.1 больше не поддерживаются, что означает, что сборка CPython 3.7 с поддержкой SSL/TLS на старых платформах, всё ещё использующих эти версии, требует пользовательских параметров сборки, которые связывают с более новой версией OpenSSL.977978  В частности, эта проблема затрагивает дистрибутивы Linux Debian 8 (также известный как «jessie») и Ubuntu 14.04 (также известный как «Trusty») LTS, поскольку они всё ещё используют OpenSSL 1.0.1 по умолчанию.979980  Debian 9 («stretch») и Ubuntu 16.04 («xenial»), а также недавние выпуски других дистрибутивов Linux LTS (например, RHEL/CentOS 7.5, SLES 12-SP3) используют OpenSSL 1.0.2 или новее и остаются поддерживаемыми в конфигурации сборки по умолчанию.981982  Собственный [файл конфигурации CI](https://python-all.ru/3.13/whatsnew/3.7.html) CPython содержит пример использования [инфраструктуры тестирования совместимости SSL](https://python-all.ru/src/3.13/Tools/ssl/multissltests.py) в тестовом наборе CPython для сборки и связывания с OpenSSL 1.1.0 вместо устаревшей системной версии OpenSSL.983984## Удаление API и функций985986Следующие возможности и API были удалены из Python 3.7:987988- Функция `os.stat_float_times()` была удалена. Она была введена в Python 2.3 для обратной совместимости с Python 2.2 и была объявлена устаревшей начиная с Python 3.1.989- Неизвестные управляющие последовательности, состоящие из `'\'` и буквы ASCII в шаблонах замены для [`re.sub()`](https://python-all.ru/3.13/library/re.html#re.sub), были объявлены устаревшими в Python 3.5, а теперь вызывают ошибку.990- Удалена поддержка аргумента *exclude* в [`tarfile.TarFile.add()`](https://python-all.ru/3.13/library/tarfile.html#tarfile.TarFile.add). Он был объявлен устаревшим в Python 2.7 и 3.2. Вместо него используйте аргумент *filter*.991- Функция `ntpath.splitunc()` была объявлена устаревшей в Python 3.1 и теперь удалена. Вместо неё используйте [`splitdrive()`](https://python-all.ru/3.13/library/os.path.html#os.path.splitdrive).992- [`collections.namedtuple()`](https://python-all.ru/3.13/library/collections.html#collections.namedtuple) больше не поддерживает параметр *verbose* и атрибут `_source`, который показывал сгенерированный исходный код для класса именованного кортежа. Это было частью оптимизации, направленной на ускорение создания класса. (Автор: Jelle Zijlstra с дополнениями от INADA Naoki, Serhiy Storchaka и Raymond Hettinger в [bpo-28638](https://python-all.ru/3.13/whatsnew/3.7.html).)993- Функции [`bool()`](https://python-all.ru/3.13/library/functions.html#bool), [`float()`](https://python-all.ru/3.13/library/functions.html#float), [`list()`](https://python-all.ru/3.13/library/stdtypes.html#list) и [`tuple()`](https://python-all.ru/3.13/library/stdtypes.html#tuple) больше не принимают именованные аргументы. Первый аргумент [`int()`](https://python-all.ru/3.13/library/functions.html#int) теперь может передаваться только как позиционный аргумент.994- Удалены ранее устаревшие (с Python 2.4) классы `Plist`, `Dict` и `_InternalDict` в модуле [`plistlib`](https://python-all.ru/3.13/library/plistlib.html#module-plistlib). Значения словарей в результате функций `readPlist()` и `readPlistFromBytes()` теперь являются обычными словарями. Больше нельзя использовать доступ по атрибуту для получения элементов этих словарей.995- Функция `asyncio.windows_utils.socketpair()` была удалена. Вместо неё используйте функцию [`socket.socketpair()`](https://python-all.ru/3.13/library/socket.html#socket.socketpair), она доступна на всех платформах начиная с Python 3.5. `asyncio.windows_utils.socketpair` была просто псевдонимом для `socket.socketpair` в Python 3.5 и новее.996- [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio) больше не экспортирует модули [`selectors`](https://python-all.ru/3.13/library/selectors.html#module-selectors) и `_overlapped` как `asyncio.selectors` и `asyncio._overlapped`. Замените `from asyncio import selectors` на `import selectors`.997- Прямое создание экземпляров объектов [`ssl.SSLSocket`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLSocket) и [`ssl.SSLObject`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLObject) теперь запрещено. Конструкторы никогда не документировались, не тестировались и не проектировались как публичные. Пользователи должны были использовать `ssl.wrap_socket()` или [`ssl.SSLContext`](https://python-all.ru/3.13/library/ssl.html#ssl.SSLContext). (Автор: Christian Heimes в [bpo-32951](https://python-all.ru/3.13/whatsnew/3.7.html).)998- Неиспользуемая команда `distutils` `install_misc` была удалена. (Автор: Eric N. Vander Weele в [bpo-29218](https://python-all.ru/3.13/whatsnew/3.7.html).)9991000## Удаление модулей10011002Модуль `fpectl` был удалён. Он никогда не был включён по умолчанию, никогда не работал корректно на x86-64 и изменял Python ABI таким образом, что это вызывало неожиданные поломки C-расширений. (Автор: Nathaniel J. Smith в [bpo-29137](https://python-all.ru/3.13/whatsnew/3.7.html).)10031004## Изменения только для Windows10051006Запускатор Python (py.exe) теперь может принимать спецификаторы 32 и 64 бит **без** необходимости указывать также минорную версию. Так что `py -3-32` и `py -3-64` становятся допустимыми, как и `py -3.7-32`, а также формы -*m*-64 и -*m.n*-64 теперь принимаются для принудительного использования 64-битного Python, даже если в противном случае был бы использован 32-битный. Если указанная версия недоступна, py.exe завершится с ошибкой. (Автор: Steve Barnes в [bpo-30291](https://python-all.ru/3.13/whatsnew/3.7.html).)10071008Запускатель можно запустить как `py -0` для получения списка установленных Python, *при этом версия по умолчанию помечается звёздочкой*. Запуск `py -0p` выведет также пути. Если py запускается с указанием версии, которой нет, он также выведет *краткий* список доступных спецификаторов. (Предложено Steve Barnes в [bpo-30362](https://python-all.ru/3.13/whatsnew/3.7.html).)10091010## Переход на Python 3.710111012В этом разделе перечислены ранее описанные изменения и другие исправления ошибок, которые могут потребовать изменений в вашем коде.10131014### Изменения в поведении Python10151016- Имена [`async`](https://python-all.ru/3.13/reference/compound_stmts.html#async) и [`await`](https://python-all.ru/3.13/reference/expressions.html#await) теперь являются зарезервированными ключевыми словами. Код, использующий эти имена как идентификаторы, теперь будет вызывать [`SyntaxError`](https://python-all.ru/3.13/library/exceptions.html#SyntaxError). (Автор: Jelle Zijlstra в [bpo-30406](https://python-all.ru/3.13/whatsnew/3.7.html).)1017- [**PEP 479**](https://python-all.ru/3.13/whatsnew/3.7.html) включён для всего кода в Python 3.7, что означает, что исключения [`StopIteration`](https://python-all.ru/3.13/library/exceptions.html#StopIteration), возникающие прямо или косвенно в корутинах и генераторах, преобразуются в исключения [`RuntimeError`](https://python-all.ru/3.13/library/exceptions.html#RuntimeError). (Автор: Yury Selivanov в [bpo-32670](https://python-all.ru/3.13/whatsnew/3.7.html).)1018- Методы [`object.__aiter__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__aiter__) больше нельзя объявлять как асинхронные. (Автор: Yury Selivanov в [bpo-31709](https://python-all.ru/3.13/whatsnew/3.7.html).)1019- Из-за недосмотра более ранние версии Python ошибочно принимали следующий синтаксис:10201021  ```python1022  f(1 for x in [1],)10231024  class C(1 for x in [1]):1025      pass1026  ```10271028  Python 3.7 теперь корректно вызывает исключение [`SyntaxError`](https://python-all.ru/3.13/library/exceptions.html#SyntaxError), так как выражение-генератор всегда должно находиться непосредственно внутри круглых скобок и не может иметь запятую с любой стороны, а дублирование скобок может быть опущено только в вызовах. (Автор: Serhiy Storchaka в [bpo-32012](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-32023](https://python-all.ru/3.13/whatsnew/3.7.html).)1029- При использовании параметра [`-m`](https://python-all.ru/3.13/using/cmdline.html#cmdoption-m) начальный рабочий каталог теперь добавляется в [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) вместо пустой строки (которая динамически обозначала текущий рабочий каталог на момент каждого импорта). Любые программы, которые проверяют пустую строку или иным образом полагаются на предыдущее поведение, должны быть соответствующим образом обновлены (например, также проверять `os.getcwd()` или `os.path.dirname(__main__.__file__)`, в зависимости от того, зачем код изначально проверял пустую строку).10301031### Изменения в Python API10321033- [`socketserver.ThreadingMixIn.server_close`](https://python-all.ru/3.13/library/socketserver.html#socketserver.BaseServer.server_close) теперь ожидает завершения всех не-демонических потоков. Установите новый атрибут класса [`socketserver.ThreadingMixIn.block_on_close`](https://python-all.ru/3.13/library/socketserver.html#socketserver.ThreadingMixIn.block_on_close) в `False`, чтобы получить поведение до версии 3.7. (Автор: Victor Stinner в [bpo-31233](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-33540](https://python-all.ru/3.13/whatsnew/3.7.html).)1034- [`socketserver.ForkingMixIn.server_close`](https://python-all.ru/3.13/library/socketserver.html#socketserver.BaseServer.server_close) теперь ожидает завершения всех дочерних процессов. Установите новый атрибут класса [`socketserver.ForkingMixIn.block_on_close`](https://python-all.ru/3.13/library/socketserver.html#socketserver.ThreadingMixIn.block_on_close) в `False`, чтобы получить поведение до версии 3.7. (Автор: Victor Stinner в [bpo-31151](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-33540](https://python-all.ru/3.13/whatsnew/3.7.html).)1035- Функция [`locale.localeconv()`](https://python-all.ru/3.13/library/locale.html#locale.localeconv) теперь временно устанавливает локаль `LC_CTYPE` в значение `LC_NUMERIC` в некоторых случаях. (Автор: Victor Stinner в [bpo-31900](https://python-all.ru/3.13/whatsnew/3.7.html).)1036- [`pkgutil.walk_packages()`](https://python-all.ru/3.13/library/pkgutil.html#pkgutil.walk_packages) теперь вызывает исключение [`ValueError`](https://python-all.ru/3.13/library/exceptions.html#ValueError), если *path* является строкой. Ранее возвращался пустой список. (Автор: Sanyam Khurana в [bpo-24744](https://python-all.ru/3.13/whatsnew/3.7.html).)1037- Аргумент строки форматирования для [`string.Formatter.format()`](https://python-all.ru/3.13/library/string.html#string.Formatter.format) теперь является [только позиционным](https://python-all.ru/3.13/glossary.html#positional-only-parameter). Передача его как именованного аргумента была объявлена устаревшей в Python 3.5. (Автор: Serhiy Storchaka в [bpo-29193](https://python-all.ru/3.13/whatsnew/3.7.html).)1038- Атрибуты [`key`](https://python-all.ru/3.13/library/http.cookies.html#http.cookies.Morsel.key), [`value`](https://python-all.ru/3.13/library/http.cookies.html#http.cookies.Morsel.value) и [`coded_value`](https://python-all.ru/3.13/library/http.cookies.html#http.cookies.Morsel.coded_value) класса [`http.cookies.Morsel`](https://python-all.ru/3.13/library/http.cookies.html#http.cookies.Morsel) теперь доступны только для чтения. Их присваивание было объявлено устаревшим в Python 3.5. Используйте метод [`set()`](https://python-all.ru/3.13/library/http.cookies.html#http.cookies.Morsel.set) для их установки. (Автор: Serhiy Storchaka в [bpo-29192](https://python-all.ru/3.13/whatsnew/3.7.html).)1039- Аргумент *mode* функции [`os.makedirs()`](https://python-all.ru/3.13/library/os.html#os.makedirs) больше не влияет на биты прав доступа к файлам вновь создаваемых промежуточных каталогов. Чтобы задать их биты прав доступа, можно установить umask перед вызовом `makedirs()`. (Автор: Serhiy Storchaka в [bpo-19930](https://python-all.ru/3.13/whatsnew/3.7.html).)1040- Тип [`struct.Struct.format`](https://python-all.ru/3.13/library/struct.html#struct.Struct.format) теперь является [`str`](https://python-all.ru/3.13/library/stdtypes.html#str) вместо [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes). (Автор: Victor Stinner в [bpo-21071](https://python-all.ru/3.13/whatsnew/3.7.html).)1041- `cgi.parse_multipart()` теперь принимает аргументы *encoding* и *errors* и возвращает те же результаты, что и `FieldStorage`: для полей, не относящихся к файлам, значение, связанное с ключом, является списком строк, а не байтов. (Автор: Pierre Quentel в [bpo-29979](https://python-all.ru/3.13/whatsnew/3.7.html).)1042- Из-за внутренних изменений в [`socket`](https://python-all.ru/3.13/library/socket.html#module-socket) вызов [`socket.fromshare()`](https://python-all.ru/3.13/library/socket.html#socket.fromshare) на сокете, созданном с помощью [`socket.share`](https://python-all.ru/3.13/library/socket.html#socket.socket.share) в старых версиях Python, не поддерживается.1043- `repr` для [`BaseException`](https://python-all.ru/3.13/library/exceptions.html#BaseException) теперь не включает завершающую запятую. Большинство исключений затронуты этим изменением. (Автор: Serhiy Storchaka в [bpo-30399](https://python-all.ru/3.13/whatsnew/3.7.html).)1044- `repr` для [`datetime.timedelta`](https://python-all.ru/3.13/library/datetime.html#datetime.timedelta) изменился: теперь в вывод включаются ключевые аргументы. (Автор: Utkarsh Upadhyay в [bpo-30302](https://python-all.ru/3.13/whatsnew/3.7.html).)1045- Поскольку [`shutil.rmtree()`](https://python-all.ru/3.13/library/shutil.html#shutil.rmtree) теперь реализована с помощью функции [`os.scandir()`](https://python-all.ru/3.13/library/os.html#os.scandir), пользовательский обработчик *onerror* теперь вызывается с первым аргументом `os.scandir` вместо `os.listdir`, когда не удаётся прочитать содержимое каталога.1046- Поддержка вложенных наборов и операций над наборами в регулярных выражениях, как в [Unicode Technical Standard #18](https://python-all.ru/3.13/whatsnew/3.7.html), может быть добавлена в будущем. Это изменит синтаксис. Чтобы облегчить это будущее изменение, пока в неоднозначных случаях будет вызываться [`FutureWarning`](https://python-all.ru/3.13/library/exceptions.html#FutureWarning). Это включает наборы, начинающиеся с литерала `'['` или содержащие литеральные последовательности символов `'--'`, `'&&'`, `'~~'` и `'||'`. Чтобы избежать предупреждения, экранируйте их обратной косой чертой. (Автор: Serhiy Storchaka в [bpo-30349](https://python-all.ru/3.13/whatsnew/3.7.html).)1047- Результат разбиения строки по шаблону [`regular expression`](https://python-all.ru/3.13/library/re.html#module-re), который может совпадать с пустой строкой, был изменён. Например, разбиение по `r'\s*'` теперь будет разбивать не только по пробельным символам, как раньше, но и по пустым строкам перед всеми непробельными символами и непосредственно перед концом строки. Прежнее поведение можно восстановить, изменив шаблон на `r'\s+'`. Предупреждение [`FutureWarning`](https://python-all.ru/3.13/library/exceptions.html#FutureWarning) выдавалось для таких шаблонов, начиная с Python 3.5.10481049  Для шаблонов, которые совпадают как с пустыми, так и с непустыми строками, результат поиска всех совпадений также может измениться в других случаях. Например, в строке `'a\n\n'` шаблон `r'(?m)^\s*?$'` будет совпадать не только с пустыми строками на позициях 2 и 3, но и со строкой `'\n'` на позициях 2–3. Чтобы сопоставить только пустые строки, шаблон следует переписать как `r'(?m)^[^\S\n]*$'`.10501051  [`re.sub()`](https://python-all.ru/3.13/library/re.html#re.sub) теперь заменяет пустые совпадения, смежные с предыдущим непустым совпадением. Например, `re.sub('x*', '-', 'abxd')` теперь возвращает `'-a-b--d-'` вместо `'-a-b-d-'` (первый минус между ‘b’ и ‘d’ заменяет ‘x’, а второй минус заменяет пустую строку между ‘x’ и ‘d’).10521053  (Автор: Serhiy Storchaka в [bpo-25054](https://python-all.ru/3.13/whatsnew/3.7.html) и [bpo-32308](https://python-all.ru/3.13/whatsnew/3.7.html).)1054- Изменение [`re.escape()`](https://python-all.ru/3.13/library/re.html#re.escape): теперь экранируются только специальные символы регулярных выражений вместо экранирования всех символов, кроме букв ASCII, цифр и `'_'`. (Автор: Serhiy Storchaka в [bpo-29995](https://python-all.ru/3.13/whatsnew/3.7.html).)1055- Фреймы [`tracemalloc.Traceback`](https://python-all.ru/3.13/library/tracemalloc.html#tracemalloc.Traceback) теперь сортируются от самого старого к самому новому для большей согласованности с [`traceback`](https://python-all.ru/3.13/library/traceback.html#module-traceback). (Автор: Jesse Bakker в [bpo-32121](https://python-all.ru/3.13/whatsnew/3.7.html).)1056- В ОС, поддерживающих битовые флаги [`socket.SOCK_NONBLOCK`](https://python-all.ru/3.13/library/socket.html#socket.SOCK_NONBLOCK) или [`socket.SOCK_CLOEXEC`](https://python-all.ru/3.13/library/socket.html#socket.SOCK_CLOEXEC), [`socket.type`](https://python-all.ru/3.13/library/socket.html#socket.socket.type) больше не применяет их. Поэтому проверки вида `if sock.type == socket.SOCK_STREAM` работают как ожидается на всех платформах. (Автор: Yury Selivanov в [bpo-32331](https://python-all.ru/3.13/whatsnew/3.7.html).)1057- В Windows значение по умолчанию для аргумента *close\_fds* функции [`subprocess.Popen`](https://python-all.ru/3.13/library/subprocess.html#subprocess.Popen) было изменено с [`False`](https://python-all.ru/3.13/library/constants.html#False) на [`True`](https://python-all.ru/3.13/library/constants.html#True) при перенаправлении стандартных дескрипторов. Если ранее вы полагались на то, что дескрипторы наследуются при использовании `subprocess.Popen` с перенаправлением стандартного ввода-вывода, вам придётся передать `close_fds=False`, чтобы сохранить прежнее поведение, или использовать [`STARTUPINFO.lpAttributeList`](https://python-all.ru/3.13/library/subprocess.html#subprocess.STARTUPINFO.lpAttributeList).1058- [`importlib.machinery.PathFinder.invalidate_caches()`](https://python-all.ru/3.13/library/importlib.html#importlib.machinery.PathFinder.invalidate_caches) – который неявно влияет на [`importlib.invalidate_caches()`](https://python-all.ru/3.13/library/importlib.html#importlib.invalidate_caches) – теперь удаляет записи в [`sys.path_importer_cache`](https://python-all.ru/3.13/library/sys.html#sys.path_importer_cache), для которых установлено значение `None`. (Автор: Brett Cannon в [bpo-33169](https://python-all.ru/3.13/whatsnew/3.7.html).)1059- В [`asyncio`](https://python-all.ru/3.13/library/asyncio.html#module-asyncio), [`loop.sock_recv()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.sock_recv), [`loop.sock_sendall()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.sock_sendall), [`loop.sock_accept()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.sock_accept), [`loop.getaddrinfo()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.getaddrinfo), [`loop.getnameinfo()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.getnameinfo) были изменены, чтобы стать полноценными методами-корутинами в соответствии с их документацией. Ранее эти методы возвращали экземпляры [`asyncio.Future`](https://python-all.ru/3.13/library/asyncio-future.html#asyncio.Future). (Автор: Yury Selivanov в [bpo-32327](https://python-all.ru/3.13/whatsnew/3.7.html).)1060- [`asyncio.Server.sockets`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.Server.sockets) теперь возвращает копию внутреннего списка серверных сокетов, вместо того чтобы возвращать его напрямую. (Автор: Yury Selivanov в [bpo-32662](https://python-all.ru/3.13/whatsnew/3.7.html).)1061- [`Struct.format`](https://python-all.ru/3.13/library/struct.html#struct.Struct.format) теперь является экземпляром [`str`](https://python-all.ru/3.13/library/stdtypes.html#str) вместо экземпляра [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes). (Автор: Victor Stinner в [bpo-21071](https://python-all.ru/3.13/whatsnew/3.7.html).)1062- Подпарсеры [`argparse`](https://python-all.ru/3.13/library/argparse.html#module-argparse) теперь можно сделать обязательными, передав `required=True` в [`ArgumentParser.add_subparsers()`](https://python-all.ru/3.13/library/argparse.html#argparse.ArgumentParser.add_subparsers). (Автор: Anthony Sottile в [bpo-26510](https://python-all.ru/3.13/whatsnew/3.7.html).)1063- [`ast.literal_eval()`](https://python-all.ru/3.13/library/ast.html#ast.literal_eval) теперь стал строже. Сложение и вычитание произвольных чисел больше не допускаются. (Автор: Serhiy Storchaka в [bpo-31778](https://python-all.ru/3.13/whatsnew/3.7.html).)1064- [`Calendar.itermonthdates`](https://python-all.ru/3.13/library/calendar.html#calendar.Calendar.itermonthdates) теперь будет последовательно вызывать исключение, если дата выходит за пределы диапазона от `0001-01-01` до `9999-12-31`. Для поддержки приложений, которые не могут допускать такие исключения, можно использовать новые [`Calendar.itermonthdays3`](https://python-all.ru/3.13/library/calendar.html#calendar.Calendar.itermonthdays3) и [`Calendar.itermonthdays4`](https://python-all.ru/3.13/library/calendar.html#calendar.Calendar.itermonthdays4). Новые методы возвращают кортежи и не ограничены диапазоном, поддерживаемым [`datetime.date`](https://python-all.ru/3.13/library/datetime.html#datetime.date). (Автор: Alexander Belopolsky в [bpo-28292](https://python-all.ru/3.13/whatsnew/3.7.html).)1065- [`collections.ChainMap`](https://python-all.ru/3.13/library/collections.html#collections.ChainMap) теперь сохраняет порядок нижележащих отображений. (Автор: Raymond Hettinger в [bpo-32792](https://python-all.ru/3.13/whatsnew/3.7.html).)1066- Метод `submit()` классов [`concurrent.futures.ThreadPoolExecutor`](https://python-all.ru/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) и [`concurrent.futures.ProcessPoolExecutor`](https://python-all.ru/3.13/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor) теперь вызывает [`RuntimeError`](https://python-all.ru/3.13/library/exceptions.html#RuntimeError), если он вызывается во время завершения работы интерпретатора. (Автор: Mark Nemec в [bpo-33097](https://python-all.ru/3.13/whatsnew/3.7.html).)1067- Конструктор [`configparser.ConfigParser`](https://python-all.ru/3.13/library/configparser.html#configparser.ConfigParser) теперь использует `read_dict()` для обработки значений по умолчанию, что делает его поведение согласованным с остальным парсером. Ключи и значения не строкового типа в словаре defaults теперь неявно преобразуются в строки. (Автор: James Tocknell в [bpo-23835](https://python-all.ru/3.13/whatsnew/3.7.html).)1068- Несколько недокументированных внутренних импортов были удалены. Один из примеров: `os.errno` больше не доступен; используйте `import errno` напрямую. Обратите внимание, что такие недокументированные внутренние импорты могут быть удалены в любое время без предупреждения, даже в микроверсиях.10691070### Изменения в C API10711072Функция [`PySlice_GetIndicesEx()`](https://python-all.ru/3.13/c-api/slice.html#c.PySlice_GetIndicesEx) считается небезопасной для изменяемых последовательностей. Если индексы среза не являются экземплярами [`int`](https://python-all.ru/3.13/library/functions.html#int), а объектами, реализующими метод `__index__()`, последовательность может быть изменена после передачи её длины в `PySlice_GetIndicesEx()`. Это может привести к возврату индексов за пределами длины последовательности. Чтобы избежать возможных проблем, используйте новые функции [`PySlice_Unpack()`](https://python-all.ru/3.13/c-api/slice.html#c.PySlice_Unpack) и [`PySlice_AdjustIndices()`](https://python-all.ru/3.13/c-api/slice.html#c.PySlice_AdjustIndices). (Автор: Serhiy Storchaka в [bpo-27867](https://python-all.ru/3.13/whatsnew/3.7.html).)10731074### Изменения байткода CPython10751076Появилось два новых опкода: [`LOAD_METHOD`](https://python-all.ru/3.13/library/dis.html#opcode-LOAD_METHOD) и `CALL_METHOD`. (Автор: Yury Selivanov и INADA Naoki в [bpo-26110](https://python-all.ru/3.13/whatsnew/3.7.html).)10771078Опкод `STORE_ANNOTATION` был удалён. (Автор: Mark Shannon в [bpo-32550](https://python-all.ru/3.13/whatsnew/3.7.html).)10791080### Изменения только для Windows10811082Файл, используемый для переопределения [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path), теперь называется `<python-executable>._pth` вместо `'sys.path'`. См. раздел [Поиск модулей](https://python-all.ru/3.13/using/windows.html#windows-finding-modules) для получения дополнительной информации. (Автор: Steve Dower в [bpo-28137](https://python-all.ru/3.13/whatsnew/3.7.html).)10831084### Другие изменения в реализации CPython10851086В рамках подготовки к возможным будущим изменениям в публичном API инициализации CPython (см. [**PEP 432**](https://python-all.ru/3.13/whatsnew/3.7.html) – первоначальный, но несколько устаревший черновик), внутренняя логика запуска и управления конфигурацией CPython была значительно переработана. Хотя эти изменения призваны быть полностью прозрачными как для встраиваемых приложений, так и для пользователей обычного CLI CPython, они упоминаются здесь, поскольку рефакторинг меняет внутренний порядок различных операций во время запуска интерпретатора и, следовательно, может выявить ранее скрытые дефекты как во встраиваемых приложениях, так и в самом CPython. (Первоначально добавлено Ником Коглан и Эриком Сноу в рамках [bpo-22257](https://python-all.ru/3.13/whatsnew/3.7.html), и впоследствии обновлено Ником, Эриком и Виктором Штиннером в ряде других тикетов). Некоторые известные затронутые аспекты:10871088- `PySys_AddWarnOptionUnicode()` в настоящее время не может быть использован встраиваемыми приложениями из-за необходимости создавать объект Unicode перед вызовом `Py_Initialize`. Вместо этого используйте `PySys_AddWarnOption()`.1089- Фильтры предупреждений, добавленные встраиваемым приложением с помощью `PySys_AddWarnOption()`, теперь должны более последовательно иметь приоритет над фильтрами по умолчанию, установленными интерпретатором.10901091Из-за изменений в настройке фильтров предупреждений по умолчанию установка [`Py_BytesWarningFlag`](https://python-all.ru/3.13/c-api/init.html#c.Py_BytesWarningFlag) в значение больше единицы больше не является достаточной для того, чтобы одновременно генерировать сообщения [`BytesWarning`](https://python-all.ru/3.13/library/exceptions.html#BytesWarning) и преобразовывать их в исключения. Вместо этого флаг должен быть установлен (чтобы вызвать выдачу предупреждений), и необходимо добавить явный фильтр предупреждений `error::BytesWarning` для преобразования их в исключения.10921093Из-за изменения способа обработки докстрингов компилятором неявный `return None` в теле функции, состоящем только из докстринга, теперь помечается как происходящий на той же строке, что и докстринг, а не на строке заголовка функции.10941095Текущее состояние исключения было перемещено из объекта фрейма в корутину. Это упростило интерпретатор и исправило несколько трудноуловимых ошибок, вызванных переключением состояния исключения при входе в генератор или выходе из него. (Добавлено Марком Шенноном в [bpo-25612](https://python-all.ru/3.13/whatsnew/3.7.html).)10961097## Заметные изменения в Python 3.7.110981099Начиная с версии 3.7.1, [`Py_Initialize()`](https://python-all.ru/3.13/c-api/init.html#c.Py_Initialize) теперь последовательно читает и учитывает все те же переменные окружения, что и [`Py_Main()`](https://python-all.ru/3.13/c-api/init.html#c.Py_Main) (в более ранних версиях Python учитывался плохо определённый подмножество этих переменных, а в Python 3.7.0 он не читал их вовсе из-за [bpo-34247](https://python-all.ru/3.13/whatsnew/3.7.html)). Если такое поведение нежелательно, установите [`Py_IgnoreEnvironmentFlag`](https://python-all.ru/3.13/c-api/init.html#c.Py_IgnoreEnvironmentFlag) в 1 перед вызовом `Py_Initialize()`.11001101В версии 3.7.1 C API для контекстных переменных [был обновлён](https://python-all.ru/3.13/c-api/contextvars.html#contextvarsobjects-pointertype-change) для использования указателей [`PyObject`](https://python-all.ru/3.13/c-api/structures.html#c.PyObject). См. также [bpo-34762](https://python-all.ru/3.13/whatsnew/3.7.html).11021103В версии 3.7.1 модуль [`tokenize`](https://python-all.ru/3.13/library/tokenize.html#module-tokenize) теперь неявно генерирует токен `NEWLINE`, если на вход подаётся строка без завершающего символа новой строки. Такое поведение теперь соответствует тому, что делает C-токенизатор внутри. (Добавлено Аммаром Аскаром в [bpo-33899](https://python-all.ru/3.13/whatsnew/3.7.html).)11041105## Заметные изменения в Python 3.7.211061107В версии 3.7.2 [`venv`](https://python-all.ru/3.13/library/venv.html#module-venv) в Windows больше не копирует исходные бинарные файлы, а вместо этого создаёт скрипты-перенаправители с именами `python.exe` и `pythonw.exe`. Это решает давнюю проблему, когда все виртуальные окружения приходилось обновлять или пересоздавать с каждым обновлением Python. Однако обратите внимание, что для получения новых скриптов этот выпуск всё равно потребует пересоздания виртуальных окружений.11081109## Заметные изменения в Python 3.7.611101111Из-за серьёзных проблем безопасности параметр *reuse\_address* функции [`asyncio.loop.create_datagram_endpoint()`](https://python-all.ru/3.13/library/asyncio-eventloop.html#asyncio.loop.create_datagram_endpoint) больше не поддерживается. Это связано с поведением опции сокета `SO_REUSEADDR` в UDP. Подробнее см. документацию `loop.create_datagram_endpoint()`. (Авторы: Kyle Stanley, Antoine Pitrou и Yury Selivanov в [bpo-37228](https://python-all.ru/3.13/whatsnew/3.7.html).)11121113## Заметные изменения в Python 3.7.1011141115Более ранние версии Python допускали использование как `;`, так и `&` в качестве разделителей параметров запроса в [`urllib.parse.parse_qs()`](https://python-all.ru/3.13/library/urllib.parse.html#urllib.parse.parse_qs) и [`urllib.parse.parse_qsl()`](https://python-all.ru/3.13/library/urllib.parse.html#urllib.parse.parse_qsl). Из соображений безопасности и для соответствия новым рекомендациям W3C это поведение было изменено: теперь разрешён только один ключ-разделитель, `&` по умолчанию. Это изменение также затрагивает `cgi.parse()` и `cgi.parse_multipart()`, поскольку они внутренне используют затронутые функции. Дополнительные сведения см. в их документации. (Авторы: Adam Goldschmidt, Senthil Kumaran и Ken Jin в [bpo-42967](https://python-all.ru/3.13/whatsnew/3.7.html).)11161117## Заметные изменения в Python 3.7.1111181119Исправление безопасности изменяет поведение [`ftplib.FTP`](https://python-all.ru/3.13/library/ftplib.html#ftplib.FTP), чтобы не доверять IPv4-адресу, отправленному удалённым сервером при настройке пассивного канала данных. Вместо этого используется IP-адрес FTP-сервера. Для необычного кода, которому требуется старое поведение, установите атрибут `trust_server_pasv_ipv4_address` экземпляра FTP в `True`. (См. [gh-87451](https://python-all.ru/3.13/whatsnew/3.7.html))11201121Наличие символов новой строки или табуляции в частях URL-адреса делает возможными некоторые виды атак. Следуя спецификации WHATWG, обновляющей RFC 3986, символы ASCII новой строки `\n`, `\r` и табуляции `\t` удаляются из URL парсером [`urllib.parse()`](https://python-all.ru/3.13/library/urllib.parse.html#module-urllib.parse), что предотвращает такие атаки. Удаляемые символы контролируются новой переменной уровня модуля `urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE`. (См. [gh-88048](https://python-all.ru/3.13/whatsnew/3.7.html))11221123## Заметная функция безопасности в 3.7.1411241125Преобразование между [`int`](https://python-all.ru/3.13/library/functions.html#int) и [`str`](https://python-all.ru/3.13/library/stdtypes.html#str) по основаниям, отличным от 2 (двоичное), 4, 8 (восьмеричное), 16 (шестнадцатеричное) или 32, таким как основание 10 (десятичное), теперь вызывает [`ValueError`](https://python-all.ru/3.13/library/exceptions.html#ValueError), если количество цифр в строковом представлении превышает лимит, чтобы избежать потенциальных атак типа «отказ в обслуживании» из-за алгоритмической сложности. Это смягчение для [**CVE 2020-10735**](https://python-all.ru/3.13/whatsnew/3.7.html). Этот лимит можно настроить или отключить с помощью переменной окружения, флага командной строки или API [`sys`](https://python-all.ru/3.13/library/sys.html#module-sys). См. документацию [ограничения длины строкового представления целых чисел](https://python-all.ru/3.13/library/stdtypes.html#int-max-str-digits). Лимит по умолчанию – 4300 цифр в строковом представлении.1126