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

3.5.md

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

1> **Источник:** https://python-all.ru/3.15/whatsnew/3.5.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Что нового в Python 3.589**Редакторы:**1011Elvis Pranskevichus \<[elvis@magic.io](https://python-all.ru/3.15/whatsnew/3.5.html)\>, Yury Selivanov \<[yury@magic.io](https://python-all.ru/3.15/whatsnew/3.5.html)\>1213В этой статье описаны новые возможности Python 3.5 по сравнению с версией 3.4. Python 3.5 был выпущен 13 сентября 2015 года. Полный список изменений см. в [списке изменений](https://python-all.ru/3.5/whatsnew/changelog.html).1415> **См. также**16>17> [**PEP 478**](https://python-all.ru/3.15/whatsnew/3.5.html) – График выпуска Python 3.51819## Итоги – основные изменения2021Новые синтаксические возможности:2223- [PEP 492](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-492), корутины с синтаксисом async и await.24- [PEP 465](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-465), новый оператор умножения матриц: `a @ b`.25- [PEP 448](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-448), дополнительные обобщения распаковки.2627Новые модули библиотеки:2829- [`typing`](https://python-all.ru/3.15/library/typing.html#module-typing): [PEP 484 – Аннотации типов](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-484).30- [`zipapp`](https://python-all.ru/3.15/library/zipapp.html#module-zipapp): [PEP 441 – Улучшение поддержки ZIP-приложений Python](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-zipapp).3132Новые встроенные возможности:3334- `bytes % args`, `bytearray % args`: [PEP 461](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-461) – Добавление форматирования `%` для bytes и bytearray.35- Новые методы [`bytes.hex()`](https://python-all.ru/3.15/library/stdtypes.html#bytes.hex), [`bytearray.hex()`](https://python-all.ru/3.15/library/stdtypes.html#bytearray.hex) и [`memoryview.hex()`](https://python-all.ru/3.15/library/stdtypes.html#memoryview.hex). (Автор: Arnon Yaari в [bpo-9951](https://python-all.ru/3.15/whatsnew/3.5.html).)36- [`memoryview`](https://python-all.ru/3.15/library/stdtypes.html#memoryview) теперь поддерживает индексацию кортежей (включая многомерную). (Автор: Antoine Pitrou в [bpo-23632](https://python-all.ru/3.15/whatsnew/3.5.html).)37- У генераторов появился новый атрибут `gi_yieldfrom`, который возвращает объект, итерируемый выражениями `yield from`. (Авторы: Benno Leslie и Yury Selivanov в [bpo-24450](https://python-all.ru/3.15/whatsnew/3.5.html).)38- Теперь при достижении максимальной глубины рекурсии возбуждается новое исключение [`RecursionError`](https://python-all.ru/3.15/library/exceptions.html#RecursionError). (Автор: Georg Brandl в [bpo-19235](https://python-all.ru/3.15/whatsnew/3.5.html).)3940Улучшения реализации CPython:4142- Когда `LC_TYPE` локаль является локалью POSIX (`C` локаль), [`sys.stdin`](https://python-all.ru/3.15/library/sys.html#sys.stdin) и [`sys.stdout`](https://python-all.ru/3.15/library/sys.html#sys.stdout) теперь используют обработчик ошибок `surrogateescape`, вместо обработчика ошибок `strict`. (Автор: Victor Stinner в [bpo-19977](https://python-all.ru/3.15/whatsnew/3.5.html).)43- Файлы `.pyo` больше не используются; вместо них используется более гибкая схема, которая явно включает уровень оптимизации в имя `.pyc`. (См. [обзор PEP 488](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-488).)44- Встроенные модули и модули расширений теперь инициализируются в многофазном процессе, аналогичном загрузке модулей Python. (См. [обзор PEP 489](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-489).)4546Значительные улучшения в стандартной библиотеке:4748- [`collections.OrderedDict`](https://python-all.ru/3.15/library/collections.html#collections.OrderedDict) is now [implemented in C](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-ordereddict), which makes it 4 to 100 times faster.49- The [`ssl`](https://python-all.ru/3.15/library/ssl.html#module-ssl) module gained [support for Memory BIO](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-sslmemorybio), which decouples SSL protocol handling from network IO.50- The new [`os.scandir()`](https://python-all.ru/3.15/library/os.html#os.scandir) function provides a [better and significantly faster way](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-471) of directory traversal.51- [`functools.lru_cache()`](https://python-all.ru/3.15/library/functools.html#functools.lru_cache) has been mostly [reimplemented in C](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-lrucache), yielding much better performance.52- The new [`subprocess.run()`](https://python-all.ru/3.15/library/subprocess.html#subprocess.run) function provides a [streamlined way to run subprocesses](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-subprocess).53- The [`traceback`](https://python-all.ru/3.15/library/traceback.html#module-traceback) module has been significantly [enhanced](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-traceback) for improved performance and developer convenience.5455Улучшения в области безопасности:5657- SSLv3 теперь отключён во всей стандартной библиотеке. Его можно включить, вручную создав экземпляр [`ssl.SSLContext`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLContext). (Подробнее см. [bpo-22638](https://python-all.ru/3.15/whatsnew/3.5.html); это изменение было перенесено в CPython 3.4 и 2.7.)58- Разбор HTTP-куки теперь выполняется более строго для защиты от потенциальных атак внедрения. (Предложено Антуаном Питу в [bpo-22796](https://python-all.ru/3.15/whatsnew/3.5.html).)5960Улучшения для Windows:6162- A new installer for Windows has replaced the old MSI. See [Using Python on Windows](https://python-all.ru/3.15/using/windows.html#using-on-windows) for more information.63- Сборки для Windows теперь используют Microsoft Visual C++ 14.0, и модули расширения должны использовать ту же версию.6465Читайте далее полный список изменений, влияющих на пользователей, включая множество других небольших улучшений, оптимизаций CPython, устаревших возможностей и потенциальных проблем при переносе.6667## Новые возможности6869### PEP 492 – Корутины с синтаксисом async и await7071[**PEP 492**](https://python-all.ru/3.15/whatsnew/3.5.html) greatly improves support for asynchronous programming in Python by adding [awaitable objects](https://python-all.ru/3.15/glossary.html#term-awaitable), [coroutine functions](https://python-all.ru/3.15/glossary.html#term-coroutine-function), [asynchronous iteration](https://python-all.ru/3.15/glossary.html#term-asynchronous-iterable), and [asynchronous context managers](https://python-all.ru/3.15/glossary.html#term-asynchronous-context-manager).7273Корутинные функции объявляются с помощью нового синтаксиса [`async def`](https://python-all.ru/3.15/reference/compound_stmts.html#async-def):7475```python76>>> async def coro():77...     return 'spam'78```7980Inside a coroutine function, the new [`await`](https://python-all.ru/3.15/reference/expressions.html#await) expression can be used to suspend coroutine execution until the result is available. Any object can be *awaited*, as long as it implements the [awaitable](https://python-all.ru/3.15/glossary.html#term-awaitable) protocol by defining the [`__await__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__await__) method.8182PEP 492 также добавляет оператор [`async for`](https://python-all.ru/3.15/reference/compound_stmts.html#async-for) для удобной итерации по асинхронным итерируемым объектам.8384Пример простейшего HTTP-клиента, написанного с использованием нового синтаксиса:8586```python87import asyncio8889async def http_get(domain):90    reader, writer = await asyncio.open_connection(domain, 80)9192    writer.write(b'\r\n'.join([93        b'GET / HTTP/1.1',94        b'Host: %b' % domain.encode('latin-1'),95        b'Connection: close',96        b'', b''97    ]))9899    async for line in reader:100        print('>>>', line)101102    writer.close()103104loop = asyncio.get_event_loop()105try:106    loop.run_until_complete(http_get('example.com'))107finally:108    loop.close()109```110111По аналогии с асинхронной итерацией существует новый синтаксис для асинхронных контекстных менеджеров. Следующий скрипт:112113```python114import asyncio115116async def coro(name, lock):117    print('coro {}: waiting for lock'.format(name))118    async with lock:119        print('coro {}: holding the lock'.format(name))120        await asyncio.sleep(1)121        print('coro {}: releasing the lock'.format(name))122123loop = asyncio.get_event_loop()124lock = asyncio.Lock()125coros = asyncio.gather(coro(1, lock), coro(2, lock))126try:127    loop.run_until_complete(coros)128finally:129    loop.close()130```131132выведет:133134```python135coro 2: waiting for lock136coro 2: holding the lock137coro 1: waiting for lock138coro 2: releasing the lock139coro 1: holding the lock140coro 1: releasing the lock141```142143Обратите внимание, что и [`async for`](https://python-all.ru/3.15/reference/compound_stmts.html#async-for), и [`async with`](https://python-all.ru/3.15/reference/compound_stmts.html#async-with) можно использовать только внутри корутинной функции, объявленной с [`async def`](https://python-all.ru/3.15/reference/compound_stmts.html#async-def).144145Coroutine functions are intended to be run inside a compatible event loop, such as the [asyncio loop](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio-event-loop).146147> **Примечание**148>149> Changed in version 3.5.2: Starting with CPython 3.5.2, `__aiter__` can directly return [asynchronous iterators](https://python-all.ru/3.15/glossary.html#term-asynchronous-iterator). Returning an [awaitable](https://python-all.ru/3.15/glossary.html#term-awaitable) object will result in a [`PendingDeprecationWarning`](https://python-all.ru/3.15/library/exceptions.html#PendingDeprecationWarning).150>151> See more details in the [Asynchronous Iterators](https://python-all.ru/3.15/reference/datamodel.html#async-iterators) documentation section.152153> **См. также**154>155> **[**PEP 492**](https://python-all.ru/3.15/whatsnew/3.5.html) – Coroutines with async and await syntax**156>157> PEP написан и реализован Юрием Селивановым.158159### PEP 465 – Выделенный инфиксный оператор для умножения матриц160161[**PEP 465**](https://python-all.ru/3.15/whatsnew/3.5.html) adds the `@` infix operator for matrix multiplication. Currently, no builtin Python types implement the new operator, however, it can be implemented by defining [`__matmul__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__matmul__), [`__rmatmul__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__rmatmul__), and [`__imatmul__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__imatmul__) for regular, reflected, and in-place matrix multiplication. The semantics of these methods is similar to that of methods defining other infix arithmetic operators.162163Умножение матриц – особенно распространённая операция во многих областях математики, науки и техники, и добавление `@` позволяет писать более чистый код:164165```python166S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)167```168169вместо:170171```python172S = dot((dot(H, beta) - r).T,173        dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))174```175176NumPy 1.10 поддерживает новый оператор:177178```python179>>> import numpy180181>>> x = numpy.ones(3)182>>> x183array([ 1., 1., 1.])184185>>> m = numpy.eye(3)186>>> m187array([[ 1., 0., 0.],188       [ 0., 1., 0.],189       [ 0., 0., 1.]])190191>>> x @ m192array([ 1., 1., 1.])193```194195> **См. также**196>197> **[**PEP 465**](https://python-all.ru/3.15/whatsnew/3.5.html) – Специализированный инфиксный оператор для матричного умножения**198>199> PEP написан Натаниэлем Дж. Смитом; реализован Бенджамином Петерсоном.200201### PEP 448 – Дополнительные обобщения распаковки202203[**PEP 448**](https://python-all.ru/3.15/whatsnew/3.5.html) расширяет допустимые способы применения `*` оператора распаковки итерируемых объектов и `**` оператора распаковки словарей. Теперь можно использовать произвольное количество распаковок в [вызовах функций](https://python-all.ru/3.15/reference/expressions.html#calls):204205```python206>>> print(*[1], *[2], 3, *[4, 5])2071 2 3 4 5208209>>> def fn(a, b, c, d):210...     print(a, b, c, d)211...212213>>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})2141 2 3 4215```216217Аналогично, литералы кортежей, списков, множеств и словарей допускают множественную распаковку (см. [Списки выражений](https://python-all.ru/3.15/reference/expressions.html#exprlists) и [Литералы словарей](https://python-all.ru/3.15/reference/expressions.html#dict)):218219```python220>>> *range(4), 4221(0, 1, 2, 3, 4)222223>>> [*range(4), 4]224[0, 1, 2, 3, 4]225226>>> {*range(4), 4, *(5, 6, 7)}227{0, 1, 2, 3, 4, 5, 6, 7}228229>>> {'x': 1, **{'y': 2}}230{'x': 1, 'y': 2}231```232233> **См. также**234>235> **[**PEP 448**](https://python-all.ru/3.15/whatsnew/3.5.html) – Дополнительные обобщения распаковки**236>237> PEP написан Джошуа Ландау; реализован Нилом Гирдхаром, Томасом Воутерсом и Джошуа Ландау.238239### PEP 461 – поддержка процентного форматирования для bytes и bytearray240241[**PEP 461**](https://python-all.ru/3.15/whatsnew/3.5.html) добавляет поддержку `%` [оператора интерполяции](https://python-all.ru/3.15/library/stdtypes.html#bytes-formatting) для [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes) и [`bytearray`](https://python-all.ru/3.15/library/stdtypes.html#bytearray).242243Хотя интерполяция обычно считается строковой операцией, существуют случаи, когда интерполяция для `bytes` или `bytearrays` имеет смысл, и работа, необходимая для восполнения отсутствующей функциональности, снижает общую читаемость кода. Эта проблема особенно актуальна при работе с протоколами формата передачи данных, которые часто представляют собой смесь двоичных и ASCII-совместимых текстов.244245Примеры:246247```python248>>> b'Hello %b!' % b'World'249b'Hello World!'250251>>> b'x=%i y=%f' % (1, 2.5)252b'x=1 y=2.500000'253```254255Unicode не допускается для `%b`, но принимается `%a` (эквивалент `repr(obj).encode('ascii', 'backslashreplace')`):256257```python258>>> b'Hello %b!' % 'World'259Traceback (most recent call last):260  File "<stdin>", line 1, in <module>261TypeError: %b requires bytes, or an object that implements __bytes__, not 'str'262263>>> b'price: %a' % '10€'264b"price: '10\\u20ac'"265```266267Обратите внимание, что типы преобразования `%s` и `%r`, хотя и поддерживаются, должны использоваться только в кодовых базах, которым требуется совместимость с Python 2.268269> **См. также**270>271> **[**PEP 461**](https://python-all.ru/3.15/whatsnew/3.5.html) – Добавление % форматирования для bytes и bytearray**272>273> PEP написан Итаном Фурманом; реализован Нилом Шеменауэром и Итаном Фурманом.274275### PEP 484 – Подсказки типов276277Синтаксис аннотаций функций является возможностью Python начиная с версии 3.0 ([**PEP 3107**](https://python-all.ru/3.15/whatsnew/3.5.html)), однако семантика аннотаций оставалась неопределённой.278279Опыт показал, что большинство случаев использования аннотаций функций сводилось к предоставлению подсказок типов для параметров функций и возвращаемых значений. Стало очевидно, что для пользователей Python было бы полезно, если бы стандартная библиотека включала базовые определения и инструменты для аннотаций типов.280281[**PEP 484**](https://python-all.ru/3.15/whatsnew/3.5.html) вводит [временный модуль](https://python-all.ru/3.15/glossary.html#term-provisional-API) для предоставления этих стандартных определений и инструментов, а также некоторые соглашения для ситуаций, когда аннотации недоступны.282283Например, вот простая функция, тип аргумента и возвращаемое значение которой объявлены в аннотациях:284285```python286def greeting(name: str) -> str:287    return 'Hello ' + name288```289290Хотя эти аннотации доступны во время выполнения через обычный атрибут [`__annotations__`](https://python-all.ru/3.15/reference/datamodel.html#object.__annotations__), *автоматическая проверка типов не происходит во время выполнения*. Вместо этого предполагается, что отдельный внешний анализатор типов (например, [mypy](https://python-all.ru/3.15/whatsnew/3.5.html)) будет использоваться для анализа исходного кода по требованию.291292Система типов поддерживает объединения, обобщённые типы и специальный тип с именем [`Any`](https://python-all.ru/3.15/library/typing.html#typing.Any), который совместим (т.е. может быть присвоен любому типу и любой тип может быть присвоен ему) со всеми типами.293294> **См. также**295>296> - [`typing`](https://python-all.ru/3.15/library/typing.html#module-typing) документация модуля297> - **[**PEP 484**](https://python-all.ru/3.15/whatsnew/3.5.html) – Подсказки типов**298>299>   PEP написан Гвидо ван Россумом, Юккой Лехтосало и Лукашем Лангой; реализован Гвидо ван Россумом.300> - **[**PEP 483**](https://python-all.ru/3.15/whatsnew/3.5.html) – Теория подсказок типов**301>302>   PEP написан Гвидо ван Россумом303304### PEP 471 – функция os.scandir() – лучший и более быстрый итератор каталогов305306[**PEP 471**](https://python-all.ru/3.15/whatsnew/3.5.html) добавляет новую функцию итерации по каталогам, [`os.scandir()`](https://python-all.ru/3.15/library/os.html#os.scandir), в стандартную библиотеку. Кроме того, [`os.walk()`](https://python-all.ru/3.15/library/os.html#os.walk) теперь реализована с помощью `scandir`, что делает её в 3-5 раз быстрее в системах POSIX и в 7-20 раз быстрее в системах Windows. Это достигается в основном за счёт значительного сокращения количества вызовов [`os.stat()`](https://python-all.ru/3.15/library/os.html#os.stat), необходимых для обхода дерева каталогов.307308Кроме того, `scandir` возвращает итератор, а не список имён файлов, что повышает эффективность использования памяти при итерации по очень большим каталогам.309310Следующий пример показывает простое использование [`os.scandir()`](https://python-all.ru/3.15/library/os.html#os.scandir) для отображения всех файлов (за исключением каталогов) в заданном *пути*, которые не начинаются с `'.'`. Вызов [`entry.is_file()`](https://python-all.ru/3.15/library/os.html#os.DirEntry.is_file) обычно не выполняет дополнительного системного вызова:311312```python313for entry in os.scandir(path):314    if not entry.name.startswith('.') and entry.is_file():315        print(entry.name)316```317318> **См. также**319>320> **[**PEP 471**](https://python-all.ru/3.15/whatsnew/3.5.html) – функция os.scandir() – более качественный и быстрый итератор каталогов**321>322> PEP написан и реализован Беном Хойтом (Ben Hoyt) при содействии Виктора Стиннера (Victor Stinner).323324### PEP 475: Повтор системных вызовов, завершающихся с EINTR325326Код ошибки [`errno.EINTR`](https://python-all.ru/3.15/library/errno.html#errno.EINTR) возвращается всякий раз, когда системный вызов, ожидающий ввода-вывода, прерывается сигналом. Ранее в таких случаях Python возбуждал [`InterruptedError`](https://python-all.ru/3.15/library/exceptions.html#InterruptedError). Это означало, что при написании приложения на Python у разработчика было два варианта:3273281. Игнорировать `InterruptedError`.3292. Обрабатывать `InterruptedError` и пытаться перезапустить прерванный системный вызов в каждом месте вызова.330331Первый вариант приводит к перемежающимся сбоям приложения. Второй вариант добавляет большое количество шаблонного кода, делающего код почти нечитаемым. Сравните:332333```python334print("Hello World")335```336337и:338339```python340while True:341    try:342        print("Hello World")343        break344    except InterruptedError:345        continue346```347348[**PEP 475**](https://python-all.ru/3.15/whatsnew/3.5.html) реализует автоматический повтор системных вызовов при `EINTR`. Это снимает необходимость обработки `EINTR` или [`InterruptedError`](https://python-all.ru/3.15/library/exceptions.html#InterruptedError) в пользовательском коде в большинстве ситуаций и делает программы Python, включая стандартную библиотеку, более надёжными. Обратите внимание, что системный вызов повторяется, только если обработчик сигнала не возбуждает исключение.349350Ниже приведён список функций, которые теперь повторяются при прерывании сигналом:351352- [`open()`](https://python-all.ru/3.15/library/functions.html#open) и [`io.open()`](https://python-all.ru/3.15/library/io.html#io.open);353- функции модуля [`faulthandler`](https://python-all.ru/3.15/library/faulthandler.html#module-faulthandler);354- функции [`os`](https://python-all.ru/3.15/library/os.html#module-os): [`fchdir()`](https://python-all.ru/3.15/library/os.html#os.fchdir), [`fchmod()`](https://python-all.ru/3.15/library/os.html#os.fchmod), [`fchown()`](https://python-all.ru/3.15/library/os.html#os.fchown), [`fdatasync()`](https://python-all.ru/3.15/library/os.html#os.fdatasync), [`fstat()`](https://python-all.ru/3.15/library/os.html#os.fstat), [`fstatvfs()`](https://python-all.ru/3.15/library/os.html#os.fstatvfs), [`fsync()`](https://python-all.ru/3.15/library/os.html#os.fsync), [`ftruncate()`](https://python-all.ru/3.15/library/os.html#os.ftruncate), [`mkfifo()`](https://python-all.ru/3.15/library/os.html#os.mkfifo), [`mknod()`](https://python-all.ru/3.15/library/os.html#os.mknod), [`open()`](https://python-all.ru/3.15/library/os.html#os.open), [`posix_fadvise()`](https://python-all.ru/3.15/library/os.html#os.posix_fadvise), [`posix_fallocate()`](https://python-all.ru/3.15/library/os.html#os.posix_fallocate), [`pread()`](https://python-all.ru/3.15/library/os.html#os.pread), [`pwrite()`](https://python-all.ru/3.15/library/os.html#os.pwrite), [`read()`](https://python-all.ru/3.15/library/os.html#os.read), [`readv()`](https://python-all.ru/3.15/library/os.html#os.readv), [`sendfile()`](https://python-all.ru/3.15/library/os.html#os.sendfile), [`wait3()`](https://python-all.ru/3.15/library/os.html#os.wait3), [`wait4()`](https://python-all.ru/3.15/library/os.html#os.wait4), [`wait()`](https://python-all.ru/3.15/library/os.html#os.wait), [`waitid()`](https://python-all.ru/3.15/library/os.html#os.waitid), [`waitpid()`](https://python-all.ru/3.15/library/os.html#os.waitpid), [`write()`](https://python-all.ru/3.15/library/os.html#os.write), [`writev()`](https://python-all.ru/3.15/library/os.html#os.writev);355- особые случаи: [`os.close()`](https://python-all.ru/3.15/library/os.html#os.close) и [`os.dup2()`](https://python-all.ru/3.15/library/os.html#os.dup2) теперь игнорируют ошибки [`EINTR`](https://python-all.ru/3.15/library/errno.html#errno.EINTR); системный вызов не повторяется (за обоснованием обратитесь к PEP);356- функции [`select`](https://python-all.ru/3.15/library/select.html#module-select): [`devpoll.poll()`](https://python-all.ru/3.15/library/select.html#select.devpoll.poll), [`epoll.poll()`](https://python-all.ru/3.15/library/select.html#select.epoll.poll), [`kqueue.control()`](https://python-all.ru/3.15/library/select.html#select.kqueue.control), [`poll.poll()`](https://python-all.ru/3.15/library/select.html#select.poll.poll), [`select()`](https://python-all.ru/3.15/library/select.html#select.select);357- методы класса [`socket`](https://python-all.ru/3.15/library/socket.html#socket.socket): [`accept()`](https://python-all.ru/3.15/library/socket.html#socket.socket.accept), [`connect()`](https://python-all.ru/3.15/library/socket.html#socket.socket.connect) (кроме неблокирующих сокетов), [`recv()`](https://python-all.ru/3.15/library/socket.html#socket.socket.recv), [`recvfrom()`](https://python-all.ru/3.15/library/socket.html#socket.socket.recvfrom), [`recvmsg()`](https://python-all.ru/3.15/library/socket.html#socket.socket.recvmsg), [`send()`](https://python-all.ru/3.15/library/socket.html#socket.socket.send), [`sendall()`](https://python-all.ru/3.15/library/socket.html#socket.socket.sendall), [`sendmsg()`](https://python-all.ru/3.15/library/socket.html#socket.socket.sendmsg), [`sendto()`](https://python-all.ru/3.15/library/socket.html#socket.socket.sendto);358- [`signal.sigtimedwait()`](https://python-all.ru/3.15/library/signal.html#signal.sigtimedwait) и [`signal.sigwaitinfo()`](https://python-all.ru/3.15/library/signal.html#signal.sigwaitinfo);359- [`time.sleep()`](https://python-all.ru/3.15/library/time.html#time.sleep).360361> **См. также**362>363> **[**PEP 475**](https://python-all.ru/3.15/whatsnew/3.5.html) – Повтор системных вызовов, завершающихся с EINTR**364>365> PEP и реализация написаны Шарлем-Франсуа Натали (Charles-François Natali) и Виктором Стиннером (Victor Stinner) при содействии Антуана Питру (Antoine Pitrou) (французское звено).366367### PEP 479: Изменение обработки StopIteration внутри генераторов368369Взаимодействие генераторов и [`StopIteration`](https://python-all.ru/3.15/library/exceptions.html#StopIteration) в Python 3.4 и более ранних версиях иногда было неожиданным и могло скрывать трудноуловимые ошибки. Ранее `StopIteration`, случайно возбуждённое внутри генераторной функции, интерпретировалось конструкцией цикла, управляющего генератором, как окончание итерации.370371[**PEP 479**](https://python-all.ru/3.15/whatsnew/3.5.html) изменяет поведение генераторов: когда внутри генератора возбуждается исключение `StopIteration`, оно заменяется на [`RuntimeError`](https://python-all.ru/3.15/library/exceptions.html#RuntimeError) перед выходом из фрейма генератора. Основная цель этого изменения – упростить отладку в ситуации, когда незащищённый вызов [`next()`](https://python-all.ru/3.15/library/functions.html#next) возбуждает `StopIteration` и приводит к молчаливому завершению итерации, управляемой генератором. Это особенно опасно в сочетании с конструкцией `yield from`.372373Это обратно несовместимое изменение, поэтому для включения нового поведения необходим импорт [\_\_future\_\_](https://python-all.ru/3.15/glossary.html#term-__future__):374375```python376>>> from __future__ import generator_stop377378>>> def gen():379...     next(iter([]))380...     yield381...382>>> next(gen())383Traceback (most recent call last):384  File "<stdin>", line 2, in gen385StopIteration386387The above exception was the direct cause of the following exception:388389Traceback (most recent call last):390  File "<stdin>", line 1, in <module>391RuntimeError: generator raised StopIteration392```393394Без импорта `__future__` будет возбуждаться [`PendingDeprecationWarning`](https://python-all.ru/3.15/library/exceptions.html#PendingDeprecationWarning) всякий раз, когда внутри генератора возбуждается исключение [`StopIteration`](https://python-all.ru/3.15/library/exceptions.html#StopIteration).395396> **См. также**397>398> **[**PEP 479**](https://python-all.ru/3.15/whatsnew/3.5.html) – Изменение обработки StopIteration внутри генераторов**399>400> PEP написан Крисом Анжелико (Chris Angelico) и Гвидо ван Россумом (Guido van Rossum). Реализован Крисом Анжелико, Юрием Селивановым и Ником Когланом (Nick Coghlan).401402### PEP 485: Функция для проверки приблизительного равенства403404[**PEP 485**](https://python-all.ru/3.15/whatsnew/3.5.html) добавляет функции [`math.isclose()`](https://python-all.ru/3.15/library/math.html#math.isclose) и [`cmath.isclose()`](https://python-all.ru/3.15/library/cmath.html#cmath.isclose), которые определяют, являются ли два значения приблизительно равными или «близкими» друг к другу. Решение о том, считаются ли два значения близкими, принимается на основе заданных абсолютного и относительного допусков. Относительный допуск – это максимально допустимая разница между аргументами `isclose`, относительно большего абсолютного значения:405406```python407>>> import math408>>> a = 5.0409>>> b = 4.99998410>>> math.isclose(a, b, rel_tol=1e-5)411True412>>> math.isclose(a, b, rel_tol=1e-6)413False414```415416Также можно сравнивать два значения с использованием абсолютного допуска, который должен быть неотрицательным:417418```python419>>> import math420>>> a = 5.0421>>> b = 4.99998422>>> math.isclose(a, b, abs_tol=0.00003)423True424>>> math.isclose(a, b, abs_tol=0.00001)425False426```427428> **См. также**429>430> **[**PEP 485**](https://python-all.ru/3.15/whatsnew/3.5.html) – Функция для проверки приблизительного равенства**431>432> PEP написан Кристофером Баркером (Christopher Barker); реализован Крисом Баркером (Chris Barker) и Талем Эйнатом (Tal Einat).433434### PEP 486: Обучить средство запуска Python работе с виртуальными окружениями435436[**PEP 486**](https://python-all.ru/3.15/whatsnew/3.5.html) обучает средство запуска Windows (см. [**PEP 397**](https://python-all.ru/3.15/whatsnew/3.5.html)) распознавать активное виртуальное окружение. Когда используется интерпретатор по умолчанию и установлена переменная окружения `VIRTUAL_ENV`, будет использоваться интерпретатор из виртуального окружения.437438> **См. также**439>440> **[**PEP 486**](https://python-all.ru/3.15/whatsnew/3.5.html) – Обучить средство запуска Python работе с виртуальными окружениями**441>442> PEP написан и реализован Полом Муром.443444### PEP 488: Устранение PYO файлов445446[**PEP 488**](https://python-all.ru/3.15/whatsnew/3.5.html) отменяет понятие файлов `.pyo`. Это означает, что файлы `.pyc` теперь представляют как неоптимизированный, так и оптимизированный байткод. Чтобы избежать необходимости постоянно перегенерировать файлы байткода, файлы `.pyc` теперь имеют необязательную метку `opt-` в имени, когда байткод оптимизирован. Побочным эффектом является отсутствие конфликтов имен файлов байткода при запуске под [`-O`](https://python-all.ru/3.15/using/cmdline.html#cmdoption-O) или [`-OO`](https://python-all.ru/3.15/using/cmdline.html#cmdoption-OO). Следовательно, файлы байткода, сгенерированные из `-O` и `-OO`, теперь могут существовать одновременно. [`importlib.util.cache_from_source()`](https://python-all.ru/3.15/library/importlib.html#importlib.util.cache_from_source) имеет обновлённый API для поддержки этого изменения.447448> **См. также**449>450> **[**PEP 488**](https://python-all.ru/3.15/whatsnew/3.5.html) – Устранение PYO файлов**451>452> PEP написан и реализован Бреттом Кэнноном.453454### PEP 489: Многофазная инициализация модулей расширения455456[**PEP 489**](https://python-all.ru/3.15/whatsnew/3.5.html) обновляет инициализацию модулей расширения, чтобы использовать двухэтапный механизм загрузки модулей, введённый [**PEP 451**](https://python-all.ru/3.15/whatsnew/3.5.html) в Python 3.4.457458Это изменение делает семантику импорта модулей расширения, которые opt-in используют новый механизм, гораздо ближе к семантике модулей исходного кода и байткода Python, включая возможность использовать любой допустимый идентификатор в качестве имени модуля, а не ограничиваться ASCII.459460> **См. также**461>462> **[**PEP 489**](https://python-all.ru/3.15/whatsnew/3.5.html) – Многофазная инициализация модуля расширения**463>464> PEP написан Петром Викториным, Стефаном Бенелем и Ником Когленом; реализован Петром Викториным.465466## Прочие изменения языка467468Некоторые небольшие изменения, внесённые в ядро языка Python:469470- Добавлены обработчики ошибок `"namereplace"`. Обработчики ошибок `"backslashreplace"` теперь работают с декодированием и трансляцией. (Предоставлено Серхием Сторчакой в [bpo-19676](https://python-all.ru/3.15/whatsnew/3.5.html) и [bpo-22286](https://python-all.ru/3.15/whatsnew/3.5.html).)471- Опция [`-b`](https://python-all.ru/3.15/using/cmdline.html#cmdoption-b) теперь влияет на сравнения [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes) с [`int`](https://python-all.ru/3.15/library/functions.html#int). (Предоставлено Серхием Сторчакой в [bpo-23681](https://python-all.ru/3.15/whatsnew/3.5.html).)472- Новые казахские `kz1048` и таджикские `koi8_t` [кодеки](https://python-all.ru/3.15/library/codecs.html#standard-encodings). (Предоставлено Серхием Сторчакой в [bpo-22682](https://python-all.ru/3.15/whatsnew/3.5.html) и [bpo-22681](https://python-all.ru/3.15/whatsnew/3.5.html).)473- Докстринги свойств теперь доступны для записи. Это особенно полезно для докстрингов [`collections.namedtuple()`](https://python-all.ru/3.15/library/collections.html#collections.namedtuple). (Предоставлено Беркером Пексагом в [bpo-24064](https://python-all.ru/3.15/whatsnew/3.5.html).)474- Теперь поддерживаются циклические импорты, включающие относительные импорты. (Предоставлено Бреттом Кэнноном и Антуаном Питру в [bpo-17636](https://python-all.ru/3.15/whatsnew/3.5.html).)475476## Новые модули477478### typing479480Новый [`typing`](https://python-all.ru/3.15/library/typing.html#module-typing) [временный](https://python-all.ru/3.15/glossary.html#term-provisional-API) модуль предоставляет стандартные определения и инструменты для аннотаций типов функций. См. [Type Hints](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-484) для получения дополнительной информации.481482### zipapp483484Новый модуль [`zipapp`](https://python-all.ru/3.15/library/zipapp.html#module-zipapp) (указанный в [**PEP 441**](https://python-all.ru/3.15/whatsnew/3.5.html)) предоставляет API и инструмент командной строки для создания исполняемых Python Zip-приложений, которые были введены в Python 2.6 в [bpo-1739468](https://python-all.ru/3.15/whatsnew/3.5.html), но не были широко известны ни тогда, ни после.485486С новым модулем упаковка приложения сводится к помещению всех файлов, включая файл `__main__.py`, в каталог `myapp` и запуску:487488```console489$ python -m zipapp myapp490$ python myapp.pyz491```492493Реализация модуля предоставлена Полом Муром в [bpo-23491](https://python-all.ru/3.15/whatsnew/3.5.html).494495> **См. также**496>497> [**PEP 441**](https://python-all.ru/3.15/whatsnew/3.5.html) – Улучшение поддержки Python ZIP-приложений498499## Улучшенные модули500501### argparse502503Класс [`ArgumentParser`](https://python-all.ru/3.15/library/argparse.html#argparse.ArgumentParser) теперь позволяет отключать [сокращённое использование](https://python-all.ru/3.15/library/argparse.html#prefix-matching) длинных опций, установив [allow\_abbrev](https://python-all.ru/3.15/library/argparse.html#allow-abbrev) в `False`. (Предоставлено Джонатаном Пофом, Стивеном Бетардом, paul j3 и Даниэлем Эрикссоном в [bpo-14910](https://python-all.ru/3.15/whatsnew/3.5.html).)504505### asyncio506507Поскольку модуль [`asyncio`](https://python-all.ru/3.15/library/asyncio.html#module-asyncio) является [временным](https://python-all.ru/3.15/glossary.html#term-provisional-API), все изменения, введённые в Python 3.5, также были перенесены в Python 3.4.x.508509Заметные изменения в модуле [`asyncio`](https://python-all.ru/3.15/library/asyncio.html#module-asyncio) начиная с Python 3.4.0:510511- Новые API для отладки: методы [`loop.set_debug()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.set_debug) и [`loop.get_debug()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.get_debug). (Предоставлено Виктором Стиннером.)512- Proactor-цикл событий теперь поддерживает SSL. (Предоставлено Антуаном Питру и Виктором Стиннером в [bpo-22560](https://python-all.ru/3.15/whatsnew/3.5.html).)513- Новый метод [`loop.is_closed()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.is_closed) для проверки, закрыт ли цикл событий. (Предоставлено Виктором Стиннером в [bpo-21326](https://python-all.ru/3.15/whatsnew/3.5.html).)514- Новый [`loop.create_task()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.create_task) для удобного создания и планирования нового [`Task`](https://python-all.ru/3.15/library/asyncio-task.html#asyncio.Task) для корутины. Метод `create_task` также используется всеми функциями asyncio, которые оборачивают корутины в задачи, такими как [`asyncio.wait()`](https://python-all.ru/3.15/library/asyncio-task.html#asyncio.wait), [`asyncio.gather()`](https://python-all.ru/3.15/library/asyncio-task.html#asyncio.gather) и т.д. (Предоставлено Виктором Стиннером.)515- Новый [`transport.get_write_buffer_limits()`](https://python-all.ru/3.15/library/asyncio-protocol.html#asyncio.WriteTransport.get_write_buffer_limits) метод для запроса *верхнего* и *нижнего* порогов управления потоком. (Предложено Виктором Стиннером.)516- Функция `async()` устарела в пользу [`ensure_future()`](https://python-all.ru/3.15/library/asyncio-future.html#asyncio.ensure_future). (Предложено Юрием Селивановым.)517- Новые методы [`loop.set_task_factory()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.set_task_factory) и [`loop.get_task_factory()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.get_task_factory) для настройки фабрики задач, используемой методом [`loop.create_task()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.create_task). (Предложено Юрием Селивановым.)518- Новые [`Queue.join()`](https://python-all.ru/3.15/library/asyncio-queue.html#asyncio.Queue.join) и [`Queue.task_done()`](https://python-all.ru/3.15/library/asyncio-queue.html#asyncio.Queue.task_done) методы очереди. (Предложено Виктором Стиннером.)519- Класс `JoinableQueue` был удалён в пользу класса [`asyncio.Queue`](https://python-all.ru/3.15/library/asyncio-queue.html#asyncio.Queue). (Предложено Виктором Стиннером.)520521Обновления в версии 3.5.1:522523- Функция [`ensure_future()`](https://python-all.ru/3.15/library/asyncio-future.html#asyncio.ensure_future) и все функции, которые её используют, такие как [`loop.run_until_complete()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.run_until_complete), теперь принимают все виды [ожидаемых объектов](https://python-all.ru/3.15/glossary.html#term-awaitable). (Автор: Yury Selivanov.)524- Новая функция [`run_coroutine_threadsafe()`](https://python-all.ru/3.15/library/asyncio-task.html#asyncio.run_coroutine_threadsafe) для отправки корутин в циклы событий из других потоков. (Автор: Vincent Michel.)525- Новый метод [`Transport.is_closing()`](https://python-all.ru/3.15/library/asyncio-protocol.html#asyncio.BaseTransport.is_closing) для проверки, закрывается ли транспорт или уже закрыт. (Автор: Yury Selivanov.)526- Метод [`loop.create_server()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.create_server) теперь может принимать список хостов. (Автор: Yann Sionneau.)527528Обновления в версии 3.5.2:529530- Новый метод [`loop.create_future()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.create_future) для создания объектов Future. Это позволяет альтернативным реализациям цикла событий, таким как [uvloop](https://python-all.ru/3.15/whatsnew/3.5.html), предоставлять более быструю реализацию [`asyncio.Future`](https://python-all.ru/3.15/library/asyncio-future.html#asyncio.Future). (Предложено Юрием Селивановым.)531- Новый метод [`loop.get_exception_handler()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.get_exception_handler) для получения текущего обработчика исключений. (Предложено Юрием Селивановым.)532- Новый метод [`StreamReader.readuntil()`](https://python-all.ru/3.15/library/asyncio-stream.html#asyncio.StreamReader.readuntil) для чтения данных из потока до появления последовательности байтов-разделителей. (Автор: Mark Korenberg.)533- Методы [`loop.create_connection()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.create_connection) и [`loop.create_server()`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.create_server) оптимизированы, чтобы избежать вызова системной функции `getaddrinfo`, если адрес уже разрешён. (Предложено А. Джесси Джирю Дэвисом.)534- [`loop.sock_connect(sock, address)`](https://python-all.ru/3.15/library/asyncio-eventloop.html#asyncio.loop.sock_connect) больше не требует разрешения *адреса* перед вызовом. (Предложено А. Джесси Джирю Дэвисом.)535536### bz2537538Метод [`BZ2Decompressor.decompress`](https://python-all.ru/3.15/library/bz2.html#bz2.BZ2Decompressor.decompress) теперь принимает необязательный аргумент *max\_length* для ограничения максимального размера распакованных данных. (Предложено Николаусом Ратом в [bpo-15955](https://python-all.ru/3.15/whatsnew/3.5.html).)539540### cgi541542Класс `FieldStorage` теперь поддерживает [менеджера контекста](https://python-all.ru/3.15/glossary.html#term-context-manager) протокол. (Предложено Беркером Пексагом в [bpo-20289](https://python-all.ru/3.15/whatsnew/3.5.html).)543544### cmath545546Новая функция [`isclose()`](https://python-all.ru/3.15/library/cmath.html#cmath.isclose) предоставляет способ проверки на приблизительное равенство. (Предложено Крисом Баркером и Талем Эйнатом в [bpo-24270](https://python-all.ru/3.15/whatsnew/3.5.html).)547548### code549550Метод [`InteractiveInterpreter.showtraceback()`](https://python-all.ru/3.15/library/code.html#code.InteractiveInterpreter.showtraceback) теперь выводит полную цепочку трассировки, как и интерактивный интерпретатор. (Предложено Клавдиу Попа в [bpo-17442](https://python-all.ru/3.15/whatsnew/3.5.html).)551552### collections553554Класс [`OrderedDict`](https://python-all.ru/3.15/library/collections.html#collections.OrderedDict) теперь реализован на C, что делает его в 4–100 раз быстрее. (Предложено Эриком Сноу в [bpo-16991](https://python-all.ru/3.15/whatsnew/3.5.html).)555556Представления `OrderedDict.items()`, `OrderedDict.keys()` и `OrderedDict.values()` теперь поддерживают итерацию [`reversed()`](https://python-all.ru/3.15/library/functions.html#reversed). (Предложено Сергеем Сторчакой в [bpo-19505](https://python-all.ru/3.15/whatsnew/3.5.html).)557558Класс [`deque`](https://python-all.ru/3.15/library/collections.html#collections.deque) теперь определяет [`index()`](https://python-all.ru/3.15/library/collections.html#collections.deque.index), [`insert()`](https://python-all.ru/3.15/library/collections.html#collections.deque.insert) и [`copy()`](https://python-all.ru/3.15/library/collections.html#collections.deque.copy), а также поддерживает операторы `+` и `*`. Это позволяет распознавать объекты deque как [`MutableSequence`](https://python-all.ru/3.15/library/collections.abc.html#collections.abc.MutableSequence) и улучшает их взаимозаменяемость со списками. (Предложено Рэймондом Хеттингером в [bpo-23704](https://python-all.ru/3.15/whatsnew/3.5.html).)559560Докстринги, созданные [`namedtuple()`](https://python-all.ru/3.15/library/collections.html#collections.namedtuple), теперь можно обновлять:561562```python563Point = namedtuple('Point', ['x', 'y'])564Point.__doc__ += ': Cartesian coordinate'565Point.x.__doc__ = 'abscissa'566Point.y.__doc__ = 'ordinate'567```568569(Предложено Беркером Пексагом в [bpo-24064](https://python-all.ru/3.15/whatsnew/3.5.html).)570571Класс [`UserString`](https://python-all.ru/3.15/library/collections.html#collections.UserString) теперь реализует методы [`__getnewargs__()`](https://python-all.ru/3.15/library/pickle.html#object.__getnewargs__), [`__rmod__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__rmod__), [`casefold()`](https://python-all.ru/3.15/library/stdtypes.html#str.casefold), [`format_map()`](https://python-all.ru/3.15/library/stdtypes.html#str.format_map), [`isprintable()`](https://python-all.ru/3.15/library/stdtypes.html#str.isprintable) и [`maketrans()`](https://python-all.ru/3.15/library/stdtypes.html#str.maketrans), соответствующие методам [`str`](https://python-all.ru/3.15/library/stdtypes.html#str). (Предложено Джо Джевником в [bpo-22189](https://python-all.ru/3.15/whatsnew/3.5.html).)572573### collections.abc574575Метод `Sequence.index()` теперь принимает аргументы *start* и *stop*, чтобы соответствовать аналогичным методам [`tuple`](https://python-all.ru/3.15/library/stdtypes.html#tuple), [`list`](https://python-all.ru/3.15/library/stdtypes.html#list) и т. д. (Автор: Devin Jeanpierre в [bpo-23086](https://python-all.ru/3.15/whatsnew/3.5.html).)576577Новый абстрактный базовый класс [`Generator`](https://python-all.ru/3.15/library/collections.abc.html#collections.abc.Generator). (Автор: Stefan Behnel в [bpo-24018](https://python-all.ru/3.15/whatsnew/3.5.html).)578579Новые абстрактные базовые классы [`Awaitable`](https://python-all.ru/3.15/library/collections.abc.html#collections.abc.Awaitable), [`Coroutine`](https://python-all.ru/3.15/library/collections.abc.html#collections.abc.Coroutine), [`AsyncIterator`](https://python-all.ru/3.15/library/collections.abc.html#collections.abc.AsyncIterator) и [`AsyncIterable`](https://python-all.ru/3.15/library/collections.abc.html#collections.abc.AsyncIterable). (Автор: Yury Selivanov в [bpo-24184](https://python-all.ru/3.15/whatsnew/3.5.html).)580581Для более ранних версий Python обратный порт новых ABC доступен во внешнем [пакете PyPI](https://python-all.ru/3.15/whatsnew/3.5.html).582583### compileall584585Новая опция [`compileall`](https://python-all.ru/3.15/library/compileall.html#module-compileall), `-j N`, позволяет запускать *N* рабочих процессов одновременно для параллельной компиляции байт-кода. Функция [`compile_dir()`](https://python-all.ru/3.15/library/compileall.html#compileall.compile_dir) имеет соответствующий параметр `workers`. (Автор: Claudiu Popa в [bpo-16104](https://python-all.ru/3.15/whatsnew/3.5.html).)586587Ещё одна новая опция, `-r`, позволяет управлять максимальной глубиной рекурсии для подкаталогов. (Автор: Claudiu Popa в [bpo-19628](https://python-all.ru/3.15/whatsnew/3.5.html).)588589Опцию командной строки `-q` теперь можно указывать несколько раз – в этом случае весь вывод, включая ошибки, будет подавляться. Соответствующий параметр `quiet` в [`compile_dir()`](https://python-all.ru/3.15/library/compileall.html#compileall.compile_dir), [`compile_file()`](https://python-all.ru/3.15/library/compileall.html#compileall.compile_file) и [`compile_path()`](https://python-all.ru/3.15/library/compileall.html#compileall.compile_path) теперь может принимать целочисленное значение, указывающее уровень подавления вывода. (Автор: Thomas Kluyver в [bpo-21338](https://python-all.ru/3.15/whatsnew/3.5.html).)590591### concurrent.futures592593Метод [`Executor.map()`](https://python-all.ru/3.15/library/concurrent.futures.html#concurrent.futures.Executor.map) теперь принимает аргумент *chunksize* для группировки задач с целью повышения производительности при использовании [`ProcessPoolExecutor()`](https://python-all.ru/3.15/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor). (Автор: Dan O’Reilly в [bpo-11271](https://python-all.ru/3.15/whatsnew/3.5.html).)594595Количество рабочих процессов в конструкторе [`ThreadPoolExecutor`](https://python-all.ru/3.15/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) теперь необязательно. Значение по умолчанию – 5 \* количество CPU. (Автор: Claudiu Popa в [bpo-21527](https://python-all.ru/3.15/whatsnew/3.5.html).)596597### configparser598599[`configparser`](https://python-all.ru/3.15/library/configparser.html#module-configparser) теперь предоставляет способ настройки преобразования значений: можно указать словарь конвертеров в конструкторе [`ConfigParser`](https://python-all.ru/3.15/library/configparser.html#configparser.ConfigParser) или определить их как методы в подклассах `ConfigParser`. Конвертеры, определённые в экземпляре парсера, наследуются его прокси-объектами разделов.600601Пример:602603```python604>>> import configparser605>>> conv = {}606>>> conv['list'] = lambda v: [e.strip() for e in v.split() if e.strip()]607>>> cfg = configparser.ConfigParser(converters=conv)608>>> cfg.read_string("""609... [s]610... list = a b c d e f g611... """)612>>> cfg.get('s', 'list')613'a b c d e f g'614>>> cfg.getlist('s', 'list')615['a', 'b', 'c', 'd', 'e', 'f', 'g']616>>> section = cfg['s']617>>> section.getlist('list')618['a', 'b', 'c', 'd', 'e', 'f', 'g']619```620621(Автор: Łukasz Langa в [bpo-18159](https://python-all.ru/3.15/whatsnew/3.5.html).)622623### contextlib624625Новый [`redirect_stderr()`](https://python-all.ru/3.15/library/contextlib.html#contextlib.redirect_stderr) [менеджер контекста](https://python-all.ru/3.15/glossary.html#term-context-manager) (аналогичный [`redirect_stdout()`](https://python-all.ru/3.15/library/contextlib.html#contextlib.redirect_stdout)) упрощает для вспомогательных скриптов работу с негибкими API, которые пишут свой вывод в [`sys.stderr`](https://python-all.ru/3.15/library/sys.html#sys.stderr) и не предоставляют возможности его перенаправить:626627```python628>>> import contextlib, io, logging629>>> f = io.StringIO()630>>> with contextlib.redirect_stderr(f):631...     logging.warning('warning')632...633>>> f.getvalue()634'WARNING:root:warning\n'635```636637(Автор: Berker Peksag в [bpo-22389](https://python-all.ru/3.15/whatsnew/3.5.html).)638639### csv640641Метод [`writerow()`](https://python-all.ru/3.15/library/csv.html#csv.csvwriter.writerow) теперь поддерживает произвольные итерируемые объекты, а не только последовательности. (Автор: Serhiy Storchaka в [bpo-23171](https://python-all.ru/3.15/whatsnew/3.5.html).)642643### curses644645Новая функция [`update_lines_cols()`](https://python-all.ru/3.15/library/curses.html#curses.update_lines_cols) обновляет переменные модуля [`LINES`](https://python-all.ru/3.15/library/curses.html#curses.LINES) и [`COLS`](https://python-all.ru/3.15/library/curses.html#curses.COLS). Это полезно для обнаружения ручного изменения размера экрана. (Автор: Arnon Yaari в [bpo-4254](https://python-all.ru/3.15/whatsnew/3.5.html).)646647### dbm648649[`dumb.open`](https://python-all.ru/3.15/library/dbm.html#dbm.dumb.open) всегда создаёт новую базу данных, когда флаг имеет значение `"n"`. (Автор: Claudiu Popa в [bpo-18039](https://python-all.ru/3.15/whatsnew/3.5.html).)650651### difflib652653Кодировку HTML-документов, создаваемых [`HtmlDiff.make_file()`](https://python-all.ru/3.15/library/difflib.html#difflib.HtmlDiff.make_file), теперь можно настроить с помощью нового именованного аргумента *charset*. Кодировка по умолчанию изменилась с `"ISO-8859-1"` на `"utf-8"`. (Автор: Berker Peksag в [bpo-2052](https://python-all.ru/3.15/whatsnew/3.5.html).)654655Функция [`diff_bytes()`](https://python-all.ru/3.15/library/difflib.html#difflib.diff_bytes) теперь может сравнивать списки байтовых строк. Это исправляет регрессию из Python 2. (Авторы: Terry J. Reedy и Greg Ward в [bpo-17445](https://python-all.ru/3.15/whatsnew/3.5.html).)656657### distutils658659Обе команды `build` и `build_ext` теперь принимают опцию `-j` для включения параллельной сборки модулей расширения. (Автор: Antoine Pitrou в [bpo-5309](https://python-all.ru/3.15/whatsnew/3.5.html).)660661Модуль `distutils` теперь поддерживает сжатие `xz`, которое можно включить, передав `xztar` в качестве аргумента в `bdist --format`. (Автор: Serhiy Storchaka в [bpo-16314](https://python-all.ru/3.15/whatsnew/3.5.html).)662663### doctest664665Функция [`DocTestSuite()`](https://python-all.ru/3.15/library/doctest.html#doctest.DocTestSuite) возвращает пустой [`unittest.TestSuite`](https://python-all.ru/3.15/library/unittest.html#unittest.TestSuite), если *модуль* не содержит строк документации, вместо того чтобы возбуждать [`ValueError`](https://python-all.ru/3.15/library/exceptions.html#ValueError). (Автор: Glenn Jones в [bpo-15916](https://python-all.ru/3.15/whatsnew/3.5.html).)666667### email668669Новая опция политики [`Policy.mangle_from_`](https://python-all.ru/3.15/library/email.policy.html#email.policy.Policy.mangle_from_) управляет, добавляют ли генераторы префикс с символом `">"` к строкам, начинающимся с `"From "`, в телах электронных писем. По умолчанию `True` для [`compat32`](https://python-all.ru/3.15/library/email.policy.html#email.policy.compat32) и `False` для всех остальных политик. (Автор: Milan Oberkirch в [bpo-20098](https://python-all.ru/3.15/whatsnew/3.5.html).)670671Новый метод [`Message.get_content_disposition()`](https://python-all.ru/3.15/library/email.compat32-message.html#email.message.Message.get_content_disposition) предоставляет простой доступ к каноническому значению для заголовка *Content-Disposition*. (Автор: Abhilash Raj в [bpo-21083](https://python-all.ru/3.15/whatsnew/3.5.html).)672673Новую опцию политики [`EmailPolicy.utf8`](https://python-all.ru/3.15/library/email.policy.html#email.policy.EmailPolicy.utf8) можно установить в `True` для кодирования заголовков электронных писем с использованием кодировки UTF-8 вместо кодированных слов. Это позволяет форматировать `Messages` в соответствии с [**RFC 6532**](https://python-all.ru/3.15/whatsnew/3.5.html) и использовать с SMTP-сервером, поддерживающим расширение [**RFC 6531**](https://python-all.ru/3.15/whatsnew/3.5.html) `SMTPUTF8`. (Автор: R. David Murray в [bpo-24211](https://python-all.ru/3.15/whatsnew/3.5.html).)674675Конструктор [`mime.text.MIMEText`](https://python-all.ru/3.15/library/email.mime.html#email.mime.text.MIMEText) теперь принимает экземпляр [`charset.Charset`](https://python-all.ru/3.15/library/email.charset.html#email.charset.Charset). (Авторы: Claude Paroz и Berker Peksag в [bpo-16324](https://python-all.ru/3.15/whatsnew/3.5.html).)676677### enum678679Вызываемый объект [`Enum`](https://python-all.ru/3.15/library/enum.html#enum.Enum) получил новый параметр *start*, задающий начальное количество значений перечисления, если указаны только *names*:680681```python682>>> Animal = enum.Enum('Animal', 'cat dog', start=10)683>>> Animal.cat684<Animal.cat: 10>685>>> Animal.dog686<Animal.dog: 11>687```688689(Автор: Ethan Furman в [bpo-21706](https://python-all.ru/3.15/whatsnew/3.5.html).)690691### faulthandler692693Функции [`enable()`](https://python-all.ru/3.15/library/faulthandler.html#faulthandler.enable), [`register()`](https://python-all.ru/3.15/library/faulthandler.html#faulthandler.register), [`dump_traceback()`](https://python-all.ru/3.15/library/faulthandler.html#faulthandler.dump_traceback) и [`dump_traceback_later()`](https://python-all.ru/3.15/library/faulthandler.html#faulthandler.dump_traceback_later) теперь принимают файловые дескрипторы в дополнение к объектам, похожим на файлы. (Автор: Wei Wu в [bpo-23566](https://python-all.ru/3.15/whatsnew/3.5.html).)694695### functools696697Большая часть механизма [`lru_cache()`](https://python-all.ru/3.15/library/functools.html#functools.lru_cache) теперь реализована на C, что делает его значительно быстрее. (Авторы: Matt Joiner, Alexey Kachayev и Serhiy Storchaka в [bpo-14373](https://python-all.ru/3.15/whatsnew/3.5.html).)698699### glob700701Функции [`iglob()`](https://python-all.ru/3.15/library/glob.html#glob.iglob) и [`glob()`](https://python-all.ru/3.15/library/glob.html#glob.glob) теперь поддерживают рекурсивный поиск в подкаталогах, используя шаблон `"**"`. (Автор: Serhiy Storchaka в [bpo-13968](https://python-all.ru/3.15/whatsnew/3.5.html).)702703### gzip704705Аргумент *mode* конструктора [`GzipFile`](https://python-all.ru/3.15/library/gzip.html#gzip.GzipFile) теперь принимает `"x"` для запроса эксклюзивного создания. (Автор: Tim Heaney в [bpo-19222](https://python-all.ru/3.15/whatsnew/3.5.html).)706707### heapq708709Сравнение элементов в [`merge()`](https://python-all.ru/3.15/library/heapq.html#heapq.merge) теперь можно настраивать, передавая [функцию ключа](https://python-all.ru/3.15/glossary.html#term-key-function) в новом необязательном именованном аргументе *key*, а новый необязательный именованный аргумент *reverse* можно использовать для обращения порядка сравнения элементов:710711```python712>>> import heapq713>>> a = ['9', '777', '55555']714>>> b = ['88', '6666']715>>> list(heapq.merge(a, b, key=len))716['9', '88', '777', '6666', '55555']717>>> list(heapq.merge(reversed(a), reversed(b), key=len, reverse=True))718['55555', '6666', '777', '88', '9']719```720721(Автор: Raymond Hettinger в [bpo-13742](https://python-all.ru/3.15/whatsnew/3.5.html).)722723### http724725Новое перечисление [`HTTPStatus`](https://python-all.ru/3.15/library/http.html#http.HTTPStatus), определяющее набор HTTP-кодов состояния, фраз причины и подробных описаний на английском языке. (Автор: Demian Brecht в [bpo-21793](https://python-all.ru/3.15/whatsnew/3.5.html).)726727### http.client728729[`HTTPConnection.getresponse()`](https://python-all.ru/3.15/library/http.client.html#http.client.HTTPConnection.getresponse) теперь вызывает исключение [`RemoteDisconnected`](https://python-all.ru/3.15/library/http.client.html#http.client.RemoteDisconnected), когда соединение с удаленным сервером неожиданно закрывается. Кроме того, если возникает [`ConnectionError`](https://python-all.ru/3.15/library/exceptions.html#ConnectionError) (подклассом которого является `RemoteDisconnected`), клиентский сокет теперь автоматически закрывается и будет переподключаться при следующем запросе:730731```python732import http.client733conn = http.client.HTTPConnection('www.python.org')734for retries in range(3):735    try:736        conn.request('GET', '/')737        resp = conn.getresponse()738    except http.client.RemoteDisconnected:739        pass740```741742(Автор: Martin Panter в [bpo-3566](https://python-all.ru/3.15/whatsnew/3.5.html).)743744### idlelib и IDLE745746Поскольку idlelib реализует оболочку и редактор IDLE и не предназначен для импорта другими программами, он получает улучшения с каждым релизом. Смотрите `Lib/idlelib/NEWS.txt` для полного списка изменений начиная с 3.4.0, а также изменений, внесенных в будущих версиях 3.5.x. Этот файл также доступен из диалога IDLE Справка ‣ О программе IDLE.747748### imaplib749750Класс [`IMAP4`](https://python-all.ru/3.15/library/imaplib.html#imaplib.IMAP4) теперь поддерживает протокол [менеджера контекста](https://python-all.ru/3.15/glossary.html#term-context-manager). При использовании в операторе [`with`](https://python-all.ru/3.15/reference/compound_stmts.html#with) команда IMAP4 `LOGOUT` будет автоматически вызвана в конце блока. (Авторы: Tarek Ziadé и Serhiy Storchaka в [bpo-4972](https://python-all.ru/3.15/whatsnew/3.5.html).)751752Модуль [`imaplib`](https://python-all.ru/3.15/library/imaplib.html#module-imaplib) теперь поддерживает [**RFC 5161**](https://python-all.ru/3.15/whatsnew/3.5.html) (ENABLE Extension) и [**RFC 6855**](https://python-all.ru/3.15/whatsnew/3.5.html) (UTF-8 Support) через метод [`IMAP4.enable()`](https://python-all.ru/3.15/library/imaplib.html#imaplib.IMAP4.enable). Новый атрибут [`IMAP4.utf8_enabled`](https://python-all.ru/3.15/library/imaplib.html#imaplib.IMAP4.utf8_enabled) отслеживает, включена ли поддержка [**RFC 6855**](https://python-all.ru/3.15/whatsnew/3.5.html). (Авторы: Milan Oberkirch, R. David Murray и Maciej Szulik в [bpo-21800](https://python-all.ru/3.15/whatsnew/3.5.html).)753754Модуль [`imaplib`](https://python-all.ru/3.15/library/imaplib.html#module-imaplib) теперь автоматически кодирует не-ASCII строки имен пользователей и паролей с использованием UTF-8, как рекомендуется в RFC. (Автор: Milan Oberkirch в [bpo-21800](https://python-all.ru/3.15/whatsnew/3.5.html).)755756### imghdr757758Функция `what()` теперь распознает формат [OpenEXR](https://python-all.ru/3.15/whatsnew/3.5.html) (предложен Martin Vignali и Claudiu Popa в [bpo-20295](https://python-all.ru/3.15/whatsnew/3.5.html)) и формат [WebP](https://python-all.ru/3.15/whatsnew/3.5.html) (предложен Fabrice Aneche и Claudiu Popa в [bpo-20197](https://python-all.ru/3.15/whatsnew/3.5.html)).759760### importlib761762Класс [`util.LazyLoader`](https://python-all.ru/3.15/library/importlib.html#importlib.util.LazyLoader) позволяет отложенную загрузку модулей в приложениях, где время запуска критично. (Предложено Бреттом Кэнноном в [bpo-17621](https://python-all.ru/3.15/whatsnew/3.5.html).)763764Метод [`abc.InspectLoader.source_to_code()`](https://python-all.ru/3.15/library/importlib.html#importlib.abc.InspectLoader.source_to_code) теперь является статическим. Это упрощает инициализацию объекта модуля кодом, скомпилированным из строки, через вызов `exec(code, module.__dict__)`. (Предложено Бреттом Кэнноном в [bpo-21156](https://python-all.ru/3.15/whatsnew/3.5.html).)765766Новая функция [`util.module_from_spec()`](https://python-all.ru/3.15/library/importlib.html#importlib.util.module_from_spec) теперь является предпочтительным способом создания модуля. В отличие от прямого создания экземпляра [`types.ModuleType`](https://python-all.ru/3.15/library/types.html#types.ModuleType), эта функция устанавливает различные атрибуты, управляемые импортом, на основе переданного объекта спецификации. (Предложено Бреттом Кэнноном в [bpo-20383](https://python-all.ru/3.15/whatsnew/3.5.html).)767768### inspect769770Оба класса – [`Signature`](https://python-all.ru/3.15/library/inspect.html#inspect.Signature) и [`Parameter`](https://python-all.ru/3.15/library/inspect.html#inspect.Parameter) – теперь поддерживают сериализацию и хеширование. (Предложено Юрием Селивановым в [bpo-20726](https://python-all.ru/3.15/whatsnew/3.5.html) и [bpo-20334](https://python-all.ru/3.15/whatsnew/3.5.html).)771772Новый метод [`BoundArguments.apply_defaults()`](https://python-all.ru/3.15/library/inspect.html#inspect.BoundArguments.apply_defaults) позволяет задавать значения по умолчанию для отсутствующих аргументов:773774```python775>>> def foo(a, b='ham', *args): pass776>>> ba = inspect.signature(foo).bind('spam')777>>> ba.apply_defaults()778>>> ba.arguments779OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])780```781782(Предложено Юрием Селивановым в [bpo-24190](https://python-all.ru/3.15/whatsnew/3.5.html).)783784Новый метод класса [`Signature.from_callable()`](https://python-all.ru/3.15/library/inspect.html#inspect.Signature.from_callable) упрощает создание подклассов [`Signature`](https://python-all.ru/3.15/library/inspect.html#inspect.Signature). (Предложено Юрием Селивановым и Эриком Сноу в [bpo-17373](https://python-all.ru/3.15/whatsnew/3.5.html).)785786Функция [`signature()`](https://python-all.ru/3.15/library/inspect.html#inspect.signature) теперь принимает необязательный именованный аргумент *follow\_wrapped*, который при установке в `False` отключает автоматическое следование по ссылкам `__wrapped__`. (Предложено Юрием Селивановым в [bpo-20691](https://python-all.ru/3.15/whatsnew/3.5.html).)787788Добавлен набор новых функций для интроспекции [корутинных функций](https://python-all.ru/3.15/glossary.html#term-coroutine-function) и [объектов корутин](https://python-all.ru/3.15/glossary.html#term-coroutine): [`iscoroutine()`](https://python-all.ru/3.15/library/inspect.html#inspect.iscoroutine), [`iscoroutinefunction()`](https://python-all.ru/3.15/library/inspect.html#inspect.iscoroutinefunction), [`isawaitable()`](https://python-all.ru/3.15/library/inspect.html#inspect.isawaitable), [`getcoroutinelocals()`](https://python-all.ru/3.15/library/inspect.html#inspect.getcoroutinelocals) и [`getcoroutinestate()`](https://python-all.ru/3.15/library/inspect.html#inspect.getcoroutinestate). (Предложено Юрием Селивановым в [bpo-24017](https://python-all.ru/3.15/whatsnew/3.5.html) и [bpo-24400](https://python-all.ru/3.15/whatsnew/3.5.html).)789790Функции [`stack()`](https://python-all.ru/3.15/library/inspect.html#inspect.stack), [`trace()`](https://python-all.ru/3.15/library/inspect.html#inspect.trace), [`getouterframes()`](https://python-all.ru/3.15/library/inspect.html#inspect.getouterframes) и [`getinnerframes()`](https://python-all.ru/3.15/library/inspect.html#inspect.getinnerframes) теперь возвращают список именованных кортежей. (Предложено Дэниэлом Шахафом в [bpo-16808](https://python-all.ru/3.15/whatsnew/3.5.html).)791792### io793794Новый метод [`BufferedIOBase.readinto1()`](https://python-all.ru/3.15/library/io.html#io.BufferedIOBase.readinto1), который использует не более одного вызова методов [`RawIOBase.read()`](https://python-all.ru/3.15/library/io.html#io.RawIOBase.read) или [`RawIOBase.readinto()`](https://python-all.ru/3.15/library/io.html#io.RawIOBase.readinto) базового необработанного потока. (Предложено Николаусом Ратом в [bpo-20578](https://python-all.ru/3.15/whatsnew/3.5.html).)795796### ipaddress797798Оба класса – [`IPv4Network`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv6Network) – теперь принимают аргумент-кортеж `(address, netmask)`, что позволяет легко создавать сетевые объекты из существующих адресов:799800```python801>>> import ipaddress802>>> ipaddress.IPv4Network(('127.0.0.0', 8))803IPv4Network('127.0.0.0/8')804>>> ipaddress.IPv4Network(('127.0.0.0', '255.0.0.0'))805IPv4Network('127.0.0.0/8')806```807808(Предложено Питером Муди и Антуаном Питру в [bpo-16531](https://python-all.ru/3.15/whatsnew/3.5.html).)809810Новый атрибут [`reverse_pointer`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv4Address.reverse_pointer) для классов [`IPv4Address`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv4Address) и [`IPv6Address`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv6Address) возвращает имя обратной DNS-записи PTR:811812```python813>>> import ipaddress814>>> addr = ipaddress.IPv4Address('127.0.0.1')815>>> addr.reverse_pointer816'1.0.0.127.in-addr.arpa'817>>> addr6 = ipaddress.IPv6Address('::1')818>>> addr6.reverse_pointer819'1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa'820```821822(Предложено Леоном Вебером в [bpo-20480](https://python-all.ru/3.15/whatsnew/3.5.html).)823824### json825826Интерфейс командной строки [`json.tool`](https://python-all.ru/3.15/library/json.html#module-json.tool) теперь сохраняет порядок ключей в JSON-объектах, переданных на вход. Новая опция `--sort-keys` позволяет сортировать ключи по алфавиту. (Предложено Беркером Пексагом в [bpo-21650](https://python-all.ru/3.15/whatsnew/3.5.html).)827828Декодер JSON теперь вызывает [`JSONDecodeError`](https://python-all.ru/3.15/library/json.html#json.JSONDecodeError) вместо [`ValueError`](https://python-all.ru/3.15/library/exceptions.html#ValueError), чтобы предоставить больше контекстной информации об ошибке. (Предложено Серхием Сторчакой в [bpo-19361](https://python-all.ru/3.15/whatsnew/3.5.html).)829830### linecache831832Новую функцию [`lazycache()`](https://python-all.ru/3.15/library/linecache.html#linecache.lazycache) можно использовать для захвата информации о модуле, не основанном на файле, чтобы позже получать его строки через [`getline()`](https://python-all.ru/3.15/library/linecache.html#linecache.getline). Это позволяет избежать операций ввода-вывода до тех пор, пока строка действительно не понадобится, и не требует бесконечного хранения глобальных переменных модуля. (Предложено Робертом Коллинзом в [bpo-17911](https://python-all.ru/3.15/whatsnew/3.5.html).)833834### locale835836Новая функция [`delocalize()`](https://python-all.ru/3.15/library/locale.html#locale.delocalize) позволяет преобразовать строку в нормализованное строковое представление числа с учётом настроек `LC_NUMERIC`:837838```python839>>> import locale840>>> locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')841'de_DE.UTF-8'842>>> locale.delocalize('1.234,56')843'1234.56'844>>> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')845'en_US.UTF-8'846>>> locale.delocalize('1,234.56')847'1234.56'848```849850(Предложено Седриком Криером в [bpo-13918](https://python-all.ru/3.15/whatsnew/3.5.html).)851852### logging853854Все методы логирования ([`Logger`](https://python-all.ru/3.15/library/logging.html#logging.Logger) [`log()`](https://python-all.ru/3.15/library/logging.html#logging.Logger.log), [`exception()`](https://python-all.ru/3.15/library/logging.html#logging.Logger.exception), [`critical()`](https://python-all.ru/3.15/library/logging.html#logging.Logger.critical), [`debug()`](https://python-all.ru/3.15/library/logging.html#logging.Logger.debug) и т.д.) теперь принимают экземпляры исключений в качестве аргумента *exc\_info* в дополнение к логическим значениям и кортежам исключений:855856```python857>>> import logging858>>> try:859...     1/0860... except ZeroDivisionError as ex:861...     logging.error('exception', exc_info=ex)862ERROR:root:exception863```864865(Предложено Юрием Селивановым в [bpo-20537](https://python-all.ru/3.15/whatsnew/3.5.html).)866867Класс [`handlers.HTTPHandler`](https://python-all.ru/3.15/library/logging.handlers.html#logging.handlers.HTTPHandler) теперь принимает необязательный экземпляр [`ssl.SSLContext`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLContext) для настройки параметров SSL, используемых в HTTP-соединении. (Предложено Алексом Гейнором в [bpo-22788](https://python-all.ru/3.15/whatsnew/3.5.html).)868869Класс [`handlers.QueueListener`](https://python-all.ru/3.15/library/logging.handlers.html#logging.handlers.QueueListener) теперь принимает именованный аргумент *respect\_handler\_level*, который при установке в `True` будет передавать сообщения обработчикам с учётом их уровней. (Предложено Винаем Саджипом.)870871### lzma872873Метод [`LZMADecompressor.decompress()`](https://python-all.ru/3.15/library/lzma.html#lzma.LZMADecompressor.decompress) теперь принимает необязательный аргумент *max\_length* для ограничения максимального размера распакованных данных. (Предложено Martin Panter в [bpo-15955](https://python-all.ru/3.15/whatsnew/3.5.html).)874875### math876877В модуль [`math`](https://python-all.ru/3.15/library/math.html#module-math) добавлены две новые константы: [`inf`](https://python-all.ru/3.15/library/math.html#math.inf) и [`nan`](https://python-all.ru/3.15/library/math.html#math.nan). (Предложено Mark Dickinson в [bpo-23185](https://python-all.ru/3.15/whatsnew/3.5.html).)878879Новая функция [`isclose()`](https://python-all.ru/3.15/library/math.html#math.isclose) предоставляет способ проверки приблизительного равенства. (Предложено Chris Barker и Tal Einat в [bpo-24270](https://python-all.ru/3.15/whatsnew/3.5.html).)880881Добавлена новая функция [`gcd()`](https://python-all.ru/3.15/library/math.html#math.gcd). Функция `fractions.gcd()` теперь устарела. (Предложено Mark Dickinson и Serhiy Storchaka в [bpo-22486](https://python-all.ru/3.15/whatsnew/3.5.html).)882883### multiprocessing884885Объекты [`sharedctypes.synchronized()`](https://python-all.ru/3.15/library/multiprocessing.html#multiprocessing.sharedctypes.synchronized) теперь поддерживают протокол [менеджера контекста](https://python-all.ru/3.15/glossary.html#term-context-manager). (Предложено Charles-François Natali в [bpo-21565](https://python-all.ru/3.15/whatsnew/3.5.html).)886887### operator888889Объекты [`attrgetter()`](https://python-all.ru/3.15/library/operator.html#operator.attrgetter), [`itemgetter()`](https://python-all.ru/3.15/library/operator.html#operator.itemgetter) и [`methodcaller()`](https://python-all.ru/3.15/library/operator.html#operator.methodcaller) теперь поддерживают упаковку (pickling). (Предложено Josh Rosenberg и Serhiy Storchaka в [bpo-22955](https://python-all.ru/3.15/whatsnew/3.5.html).)890891Новые функции [`matmul()`](https://python-all.ru/3.15/library/operator.html#operator.matmul) и [`imatmul()`](https://python-all.ru/3.15/library/operator.html#operator.imatmul) для выполнения матричного умножения. (Предложено Benjamin Peterson в [bpo-21176](https://python-all.ru/3.15/whatsnew/3.5.html).)892893### os894895Добавлена новая функция [`scandir()`](https://python-all.ru/3.15/library/os.html#os.scandir), возвращающая итератор объектов [`DirEntry`](https://python-all.ru/3.15/library/os.html#os.DirEntry). Если возможно, `scandir()` извлекает атрибуты файлов при сканировании каталога, что устраняет необходимость выполнять последующие системные вызовы для определения типа или атрибутов файла, что может значительно повысить производительность. (Предложено Ben Hoyt с помощью Victor Stinner в [bpo-22524](https://python-all.ru/3.15/whatsnew/3.5.html).)896897В Windows теперь доступен новый атрибут [`stat_result.st_file_attributes`](https://python-all.ru/3.15/library/os.html#os.stat_result.st_file_attributes). Он соответствует элементу `dwFileAttributes` структуры `BY_HANDLE_FILE_INFORMATION`, возвращаемой функцией `GetFileInformationByHandle()`. (Предложено Ben Hoyt в [bpo-21719](https://python-all.ru/3.15/whatsnew/3.5.html).)898899Функция [`urandom()`](https://python-all.ru/3.15/library/os.html#os.urandom) теперь использует системный вызов `getrandom()` в Linux 3.17 или новее и `getentropy()` в OpenBSD 5.6 и новее, что устраняет необходимость использовать `/dev/urandom` и позволяет избежать ошибок из-за возможного исчерпания файловых дескрипторов. (Предложено Victor Stinner в [bpo-22181](https://python-all.ru/3.15/whatsnew/3.5.html).)900901Новые функции [`get_blocking()`](https://python-all.ru/3.15/library/os.html#os.get_blocking) и [`set_blocking()`](https://python-all.ru/3.15/library/os.html#os.set_blocking) позволяют получить и установить блокирующий режим файлового дескриптора ([`O_NONBLOCK`](https://python-all.ru/3.15/library/os.html#os.O_NONBLOCK).) (Предложено Victor Stinner в [bpo-22054](https://python-all.ru/3.15/whatsnew/3.5.html).)902903Функции [`truncate()`](https://python-all.ru/3.15/library/os.html#os.truncate) и [`ftruncate()`](https://python-all.ru/3.15/library/os.html#os.ftruncate) теперь поддерживаются в Windows. (Предложено Steve Dower в [bpo-23668](https://python-all.ru/3.15/whatsnew/3.5.html).)904905Появилась новая функция [`os.path.commonpath()`](https://python-all.ru/3.15/library/os.path.html#os.path.commonpath), возвращающая самый длинный общий подпуть каждого переданного имени пути. В отличие от функции [`os.path.commonprefix()`](https://python-all.ru/3.15/library/os.path.html#os.path.commonprefix), она всегда возвращает корректный путь:906907```python908>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])909'/usr/l'910911>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])912'/usr'913```914915(Предложено Rafik Draoui и Serhiy Storchaka в [bpo-10395](https://python-all.ru/3.15/whatsnew/3.5.html).)916917### pathlib918919Новый метод [`Path.samefile()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.samefile) можно использовать для проверки, указывает ли путь на тот же файл, что и другой путь, который может быть как объектом [`Path`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path), так и строкой:920921```python922>>> import pathlib923>>> p1 = pathlib.Path('/etc/hosts')924>>> p2 = pathlib.Path('/etc/../etc/hosts')925>>> p1.samefile(p2)926True927```928929(Предложено Vajrasky Kok и Antoine Pitrou в [bpo-19775](https://python-all.ru/3.15/whatsnew/3.5.html).)930931Метод [`Path.mkdir()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.mkdir) теперь принимает новый необязательный аргумент *exist\_ok* для соответствия функциональности `mkdir -p` и [`os.makedirs()`](https://python-all.ru/3.15/library/os.html#os.makedirs). (Предложено Berker Peksag в [bpo-21539](https://python-all.ru/3.15/whatsnew/3.5.html).)932933Появился новый метод [`Path.expanduser()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.expanduser) для разворачивания префиксов `~` и `~user`. (Предложено Serhiy Storchaka и Claudiu Popa в [bpo-19776](https://python-all.ru/3.15/whatsnew/3.5.html).)934935Новый классовый метод [`Path.home()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.home) можно использовать для получения экземпляра [`Path`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path), представляющего домашний каталог пользователя. (Предложено Victor Salgado и Mayank Tripathi в [bpo-19777](https://python-all.ru/3.15/whatsnew/3.5.html).)936937Новые методы [`Path.write_text()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.write_text), [`Path.read_text()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.read_text), [`Path.write_bytes()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.write_bytes), [`Path.read_bytes()`](https://python-all.ru/3.15/library/pathlib.html#pathlib.Path.read_bytes) для упрощения операций чтения/записи файлов.938939Следующий фрагмент кода создаст или перезапишет существующий файл `~/spam42`:940941```python942>>> import pathlib943>>> p = pathlib.Path('~/spam42')944>>> p.expanduser().write_text('ham')9453946```947948(Предложено Christopher Welborn в [bpo-20218](https://python-all.ru/3.15/whatsnew/3.5.html).)949950### pickle951952Вложенные объекты, такие как несвязанные методы или вложенные классы, теперь могут быть упакованы (pickled) с использованием [протоколов pickle](https://python-all.ru/3.15/library/pickle.html#pickle-protocols) старше версии 4. Версия 4 протокола уже поддерживает эти случаи. (Предложено Serhiy Storchaka в [bpo-23611](https://python-all.ru/3.15/whatsnew/3.5.html).)953954### poplib955956Новая команда [`POP3.utf8()`](https://python-all.ru/3.15/library/poplib.html#poplib.POP3.utf8) включает поддержку [**RFC 6856**](https://python-all.ru/3.15/whatsnew/3.5.html) (Интернационализированная электронная почта), если POP-сервер это поддерживает. (Предложено Milan OberKirch в [bpo-21804](https://python-all.ru/3.15/whatsnew/3.5.html).)957958### re959960В ретроспективных проверках (lookbehind assertions) теперь разрешены ссылки и условные ссылки на группы фиксированной длины:961962```python963>>> import re964>>> pat = re.compile(r'(a|b).(?<=\1)c')965>>> pat.match('aac')966<_sre.SRE_Match object; span=(0, 3), match='aac'>967>>> pat.match('bbc')968<_sre.SRE_Match object; span=(0, 3), match='bbc'>969```970971(Автор: Serhiy Storchaka в [bpo-9179](https://python-all.ru/3.15/whatsnew/3.5.html).)972973Количество групп захвата в регулярных выражениях больше не ограничено 100. (Автор: Serhiy Storchaka в [bpo-22437](https://python-all.ru/3.15/whatsnew/3.5.html).)974975Функции [`sub()`](https://python-all.ru/3.15/library/re.html#re.sub) и [`subn()`](https://python-all.ru/3.15/library/re.html#re.subn) теперь заменяют несовпавшие группы пустыми строками вместо возбуждения исключения. (Автор: Serhiy Storchaka в [bpo-1519638](https://python-all.ru/3.15/whatsnew/3.5.html).)976977Исключения [`re.error`](https://python-all.ru/3.15/library/re.html#re.PatternError) получили новые атрибуты: [`msg`](https://python-all.ru/3.15/library/re.html#re.PatternError.msg), [`pattern`](https://python-all.ru/3.15/library/re.html#re.PatternError.pattern), [`pos`](https://python-all.ru/3.15/library/re.html#re.PatternError.pos), [`lineno`](https://python-all.ru/3.15/library/re.html#re.PatternError.lineno) и [`colno`](https://python-all.ru/3.15/library/re.html#re.PatternError.colno), которые предоставляют более подробную контекстную информацию об ошибке:978979```python980>>> re.compile("""981...     (?x)982...     .++983... """)984Traceback (most recent call last):985   ...986sre_constants.error: multiple repeat at position 16 (line 3, column 7)987```988989(Автор: Serhiy Storchaka в [bpo-22578](https://python-all.ru/3.15/whatsnew/3.5.html).)990991### readline992993Новая функция [`append_history_file()`](https://python-all.ru/3.15/library/readline.html#readline.append_history_file) может использоваться для добавления указанного количества последних элементов истории в заданный файл. (Автор: Bruno Cauet в [bpo-22940](https://python-all.ru/3.15/whatsnew/3.5.html).)994995### selectors996997Новый [`DevpollSelector`](https://python-all.ru/3.15/library/selectors.html#selectors.DevpollSelector) обеспечивает эффективный опрос `/dev/poll` в Solaris. (Автор: Giampaolo Rodola’ в [bpo-18931](https://python-all.ru/3.15/whatsnew/3.5.html).)998999### shutil10001001Функция [`move()`](https://python-all.ru/3.15/library/shutil.html#shutil.move) теперь принимает аргумент *copy\_function*, позволяющий, например, использовать функцию [`copy()`](https://python-all.ru/3.15/library/shutil.html#shutil.copy) вместо стандартной [`copy2()`](https://python-all.ru/3.15/library/shutil.html#shutil.copy2), если необходимо игнорировать метаданные файлов при перемещении. (Автор: Claudiu Popa в [bpo-19840](https://python-all.ru/3.15/whatsnew/3.5.html).)10021003Функция [`make_archive()`](https://python-all.ru/3.15/library/shutil.html#shutil.make_archive) теперь поддерживает формат *xztar*. (Автор: Serhiy Storchaka в [bpo-5411](https://python-all.ru/3.15/whatsnew/3.5.html).)10041005### signal10061007В Windows функция [`set_wakeup_fd()`](https://python-all.ru/3.15/library/signal.html#signal.set_wakeup_fd) теперь также поддерживает дескрипторы сокетов. (Автор: Victor Stinner в [bpo-22018](https://python-all.ru/3.15/whatsnew/3.5.html).)10081009Различные константы `SIG*` в модуле [`signal`](https://python-all.ru/3.15/library/signal.html#module-signal) были преобразованы в [`Enums`](https://python-all.ru/3.15/library/enum.html#module-enum). Это позволяет выводить осмысленные имена при отладке вместо целочисленных «магических чисел». (Автор: Giampaolo Rodola’ в [bpo-21076](https://python-all.ru/3.15/whatsnew/3.5.html).)10101011### smtpd10121013Оба класса `SMTPServer` и `SMTPChannel` теперь принимают именованный аргумент *decode\_data*, определяющий, будет ли часть `DATA` SMTP-транзакции декодироваться с использованием кодека `"utf-8"` или передаваться методу `SMTPServer.process_message()` в виде байтовой строки. По умолчанию `True` для обратной совместимости, но в Python 3.6 будет изменено на `False`. Если *decode\_data* установлен в `False`, метод `process_message` должен быть готов принимать именованные аргументы. (Автор: Maciej Szulik в [bpo-19662](https://python-all.ru/3.15/whatsnew/3.5.html).)10141015Класс `SMTPServer` теперь анонсирует расширение `8BITMIME` ([**RFC 6152**](https://python-all.ru/3.15/whatsnew/3.5.html)), если *decode\_data* установлен в `True`. Если клиент указывает `BODY=8BITMIME` в команде `MAIL`, оно передаётся в `SMTPServer.process_message()` через именованный аргумент *mail\_options*. (Авторы: Milan Oberkirch и R. David Murray в [bpo-21795](https://python-all.ru/3.15/whatsnew/3.5.html).)10161017Класс `SMTPServer` теперь также поддерживает расширение `SMTPUTF8` ([**RFC 6531**](https://python-all.ru/3.15/whatsnew/3.5.html): Internationalized Email). Если клиент указал `SMTPUTF8 BODY=8BITMIME` в команде `MAIL`, они передаются в `SMTPServer.process_message()` через именованный аргумент *mail\_options*. Метод `process_message` отвечает за корректную обработку данных `SMTPUTF8`. (Автор: Milan Oberkirch в [bpo-21725](https://python-all.ru/3.15/whatsnew/3.5.html).)10181019Теперь можно указывать IPv6-адреса в конструкторе `SMTPServer` напрямую или через разрешение имён, и он будет успешно подключаться. (Автор: Milan Oberkirch в [bpo-14758](https://python-all.ru/3.15/whatsnew/3.5.html).)10201021### smtplib10221023Новый метод [`SMTP.auth()`](https://python-all.ru/3.15/library/smtplib.html#smtplib.SMTP.auth) предоставляет удобный способ реализации пользовательских механизмов аутентификации. (Автор: Milan Oberkirch в [bpo-15014](https://python-all.ru/3.15/whatsnew/3.5.html).)10241025Метод [`SMTP.set_debuglevel()`](https://python-all.ru/3.15/library/smtplib.html#smtplib.SMTP.set_debuglevel) теперь принимает дополнительный уровень отладки (2), который включает временные метки в отладочных сообщениях. (Авторы: Gavin Chappell и Maciej Szulik в [bpo-16914](https://python-all.ru/3.15/whatsnew/3.5.html).)10261027Оба метода [`SMTP.sendmail()`](https://python-all.ru/3.15/library/smtplib.html#smtplib.SMTP.sendmail) и [`SMTP.send_message()`](https://python-all.ru/3.15/library/smtplib.html#smtplib.SMTP.send_message) теперь поддерживают [**RFC 6531**](https://python-all.ru/3.15/whatsnew/3.5.html) (SMTPUTF8). (Авторы: Milan Oberkirch и R. David Murray в [bpo-22027](https://python-all.ru/3.15/whatsnew/3.5.html).)10281029### sndhdr10301031Функции `what()` и `whathdr()` теперь возвращают [`namedtuple()`](https://python-all.ru/3.15/library/collections.html#collections.namedtuple). (Автор: Claudiu Popa в [bpo-18615](https://python-all.ru/3.15/whatsnew/3.5.html).)10321033### socket10341035Функции с тайм-аутами теперь используют монотонные часы вместо системных. (Автор: Victor Stinner в [bpo-22043](https://python-all.ru/3.15/whatsnew/3.5.html).)10361037Новый метод [`socket.sendfile()`](https://python-all.ru/3.15/library/socket.html#socket.socket.sendfile) позволяет отправлять файл через сокет, используя высокопроизводительную функцию [`os.sendfile()`](https://python-all.ru/3.15/library/os.html#os.sendfile) в UNIX, что делает загрузку в 2–3 раза быстрее, чем при использовании обычного [`socket.send()`](https://python-all.ru/3.15/library/socket.html#socket.socket.send). (Автор: Giampaolo Rodola’ в [bpo-17552](https://python-all.ru/3.15/whatsnew/3.5.html).)10381039Метод [`socket.sendall()`](https://python-all.ru/3.15/library/socket.html#socket.socket.sendall) больше не сбрасывает тайм-аут сокета при каждом получении или отправке байтов. Тайм-аут сокета теперь представляет собой максимальную общую продолжительность отправки всех данных. (Автор: Victor Stinner в [bpo-23853](https://python-all.ru/3.15/whatsnew/3.5.html).)10401041Аргумент *backlog* метода [`socket.listen()`](https://python-all.ru/3.15/library/socket.html#socket.socket.listen) теперь необязателен. По умолчанию он устанавливается в [`SOMAXCONN`](https://python-all.ru/3.15/library/socket.html#socket.SOMAXCONN) или `128`, в зависимости от того, что меньше. (Автор: Charles-François Natali в [bpo-21455](https://python-all.ru/3.15/whatsnew/3.5.html).)10421043### ssl10441045#### Поддержка Memory BIO10461047(Предложено Geert Jansen в [bpo-21965](https://python-all.ru/3.15/whatsnew/3.5.html).)10481049Добавлен новый класс [`SSLObject`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLObject) для обеспечения поддержки протокола SSL в тех случаях, когда возможности сетевого ввода-вывода [`SSLSocket`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket) не нужны или неоптимальны. `SSLObject` представляет собой экземпляр протокола SSL, но не реализует методы сетевого ввода-вывода, а вместо этого предоставляет интерфейс с буфером в памяти. Новый класс [`MemoryBIO`](https://python-all.ru/3.15/library/ssl.html#ssl.MemoryBIO) можно использовать для передачи данных между Python и экземпляром протокола SSL.10501051Поддержка SSL через память BIO предназначена в первую очередь для фреймворков, реализующих асинхронный ввод-вывод, для которых модель готовности [`SSLSocket`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket) («select/poll») неэффективна.10521053Новый метод [`SSLContext.wrap_bio()`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLContext.wrap_bio) можно использовать для создания нового экземпляра `SSLObject`.10541055#### Поддержка согласования протокола прикладного уровня10561057(Предложено Benjamin Peterson в [bpo-20188](https://python-all.ru/3.15/whatsnew/3.5.html).)10581059Если OpenSSL поддерживается, модуль [`ssl`](https://python-all.ru/3.15/library/ssl.html#module-ssl) теперь реализует расширение TLS *Согласование протокола прикладного уровня*, как описано в [**RFC 7301**](https://python-all.ru/3.15/whatsnew/3.5.html).10601061Новый [`SSLContext.set_alpn_protocols()`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLContext.set_alpn_protocols) можно использовать для указания того, какие протоколы сокет должен объявлять во время рукопожатия TLS.10621063Новый [`SSLSocket.selected_alpn_protocol()`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket.selected_alpn_protocol) возвращает протокол, выбранный во время рукопожатия TLS. Флаг [`HAS_ALPN`](https://python-all.ru/3.15/library/ssl.html#ssl.HAS_ALPN) указывает, присутствует ли поддержка ALPN.10641065#### Прочие изменения10661067Добавлен новый метод [`SSLSocket.version()`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket.version) для запроса фактической используемой версии протокола. (Предложено Antoine Pitrou в [bpo-20421](https://python-all.ru/3.15/whatsnew/3.5.html).)10681069Класс [`SSLSocket`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket) теперь реализует метод `SSLSocket.sendfile()`. (Предложено Giampaolo Rodola’ в [bpo-17552](https://python-all.ru/3.15/whatsnew/3.5.html).)10701071Метод `SSLSocket.send()` теперь вызывает исключение [`ssl.SSLWantReadError`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLWantReadError) или [`ssl.SSLWantWriteError`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLWantWriteError) для неблокирующего сокета, если операция заблокировалась. Ранее он возвращал `0`. (Предложено Nikolaus Rath в [bpo-20951](https://python-all.ru/3.15/whatsnew/3.5.html).)10721073Функция [`cert_time_to_seconds()`](https://python-all.ru/3.15/library/ssl.html#ssl.cert_time_to_seconds) теперь интерпретирует входное время как UTC, а не как местное время, в соответствии с [**RFC 5280**](https://python-all.ru/3.15/whatsnew/3.5.html). Кроме того, возвращаемое значение всегда является [`int`](https://python-all.ru/3.15/library/functions.html#int). (Автор: Akira Li, [bpo-19940](https://python-all.ru/3.15/whatsnew/3.5.html).)10741075Новые методы `SSLObject.shared_ciphers()` и [`SSLSocket.shared_ciphers()`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket.shared_ciphers) возвращают список шифров, отправленных клиентом во время рукопожатия. (Предложено Benjamin Peterson в [bpo-23186](https://python-all.ru/3.15/whatsnew/3.5.html).)10761077Методы [`SSLSocket.do_handshake()`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket.do_handshake), [`SSLSocket.read()`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket.read), `SSLSocket.shutdown()` и [`SSLSocket.write()`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket.write) класса [`SSLSocket`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLSocket) больше не сбрасывают тайм-аут сокета при каждом получении или отправке байтов. Теперь тайм-аут сокета – это максимальная общая продолжительность работы метода. (Предложено Victor Stinner в [bpo-23853](https://python-all.ru/3.15/whatsnew/3.5.html).)10781079Функция `match_hostname()` теперь поддерживает сопоставление IP-адресов. (Предложено Antoine Pitrou в [bpo-23239](https://python-all.ru/3.15/whatsnew/3.5.html).)10801081### sqlite310821083Класс [`Row`](https://python-all.ru/3.15/library/sqlite3.html#sqlite3.Row) теперь полностью поддерживает протокол последовательности, в частности итерацию [`reversed()`](https://python-all.ru/3.15/library/functions.html#reversed) и индексацию по срезам. (Предложено Claudiu Popa в [bpo-10203](https://python-all.ru/3.15/whatsnew/3.5.html); Lucas Sinclair, Jessica McKellar и Serhiy Storchaka в [bpo-13583](https://python-all.ru/3.15/whatsnew/3.5.html).)10841085### подпроцесс10861087Добавлена новая функция [`run()`](https://python-all.ru/3.15/library/subprocess.html#subprocess.run). Она запускает указанную команду и возвращает объект [`CompletedProcess`](https://python-all.ru/3.15/library/subprocess.html#subprocess.CompletedProcess), описывающий завершённый процесс. Новый API более согласован и является рекомендуемым способом вызова подпроцессов в коде Python, который не требует совместимости с более ранними версиями Python. (Предложено Thomas Kluyver в [bpo-23342](https://python-all.ru/3.15/whatsnew/3.5.html).)10881089Примеры:10901091```python1092>>> subprocess.run(["ls", "-l"])  # не захватывает вывод1093CompletedProcess(args=['ls', '-l'], returncode=0)10941095>>> subprocess.run("exit 1", shell=True, check=True)1096Traceback (most recent call last):1097  ...1098subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 110991100>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)1101CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,1102stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')1103```11041105### sys11061107A new `set_coroutine_wrapper()` function allows setting a global hook that will be called whenever a [coroutine object](https://python-all.ru/3.15/glossary.html#term-coroutine) is created by an [`async def`](https://python-all.ru/3.15/reference/compound_stmts.html#async-def) function. A corresponding `get_coroutine_wrapper()` can be used to obtain a currently set wrapper. Both functions are [provisional](https://python-all.ru/3.15/glossary.html#term-provisional-API), and are intended for debugging purposes only. (Contributed by Yury Selivanov in [bpo-24017](https://python-all.ru/3.15/whatsnew/3.5.html).)11081109A new [`is_finalizing()`](https://python-all.ru/3.15/library/sys.html#sys.is_finalizing) function can be used to check if the Python interpreter is [shutting down](https://python-all.ru/3.15/glossary.html#term-interpreter-shutdown). (Contributed by Antoine Pitrou in [bpo-22696](https://python-all.ru/3.15/whatsnew/3.5.html).)11101111### sysconfig11121113Имя каталога сценариев пользователя в Windows теперь включает первые два компонента версии Python. (Предложено Paul Moore в [bpo-23437](https://python-all.ru/3.15/whatsnew/3.5.html).)11141115### tarfile11161117Аргумент *mode* функции [`open()`](https://python-all.ru/3.15/library/tarfile.html#tarfile.open) теперь принимает `"x"` для запроса эксклюзивного создания. (Предложено Berker Peksag в [bpo-21717](https://python-all.ru/3.15/whatsnew/3.5.html).)11181119Методы [`TarFile.extractall()`](https://python-all.ru/3.15/library/tarfile.html#tarfile.TarFile.extractall) и [`TarFile.extract()`](https://python-all.ru/3.15/library/tarfile.html#tarfile.TarFile.extract) теперь принимают именованный аргумент *numeric\_owner*. Если он установлен в `True`, извлечённые файлы и каталоги будут принадлежать числовому `uid` и `gid` из tar-файла. Если установлен в `False` (значение по умолчанию, и поведение в версиях до 3.5), они будут принадлежать указанным по имени пользователю и группе из tar-файла. (Предложено Michael Vogt и Eric Smith в [bpo-23193](https://python-all.ru/3.15/whatsnew/3.5.html).)11201121[`TarFile.list()`](https://python-all.ru/3.15/library/tarfile.html#tarfile.TarFile.list) теперь принимает необязательный именованный аргумент *members*, который можно установить на подмножество списка, возвращаемого [`TarFile.getmembers()`](https://python-all.ru/3.15/library/tarfile.html#tarfile.TarFile.getmembers). (Предложено Serhiy Storchaka в [bpo-21549](https://python-all.ru/3.15/whatsnew/3.5.html).)11221123### threading11241125Оба метода [`Lock.acquire()`](https://python-all.ru/3.15/library/threading.html#threading.Lock.acquire) и [`RLock.acquire()`](https://python-all.ru/3.15/library/threading.html#threading.RLock.acquire) теперь используют монотонные часы для управления тайм-аутом. (Предложено Виктором Стиннером в [bpo-22043](https://python-all.ru/3.15/whatsnew/3.5.html).)11261127### time11281129Функция [`monotonic()`](https://python-all.ru/3.15/library/time.html#time.monotonic) теперь всегда доступна. (Предложено Виктором Стиннером в [bpo-22043](https://python-all.ru/3.15/whatsnew/3.5.html).)11301131### timeit11321133Новый параметр командной строки `-u` или `--unit=U` позволяет указать единицу времени для вывода таймера. Поддерживаемые варианты: `usec`, `msec` или `sec`. (Предложено Джулианом Гинди в [bpo-18983](https://python-all.ru/3.15/whatsnew/3.5.html).)11341135Функция [`timeit()`](https://python-all.ru/3.15/library/timeit.html#timeit.timeit) получила новый параметр *globals* для указания пространства имён, в котором будет выполняться код. (Предложено Беном Робертсом в [bpo-2527](https://python-all.ru/3.15/whatsnew/3.5.html).)11361137### tkinter11381139Модуль `tkinter._fix`, использовавшийся для настройки окружения Tcl/Tk в Windows, был заменён на приватную функцию в модуле `_tkinter`, которая не вносит постоянных изменений в переменные окружения. (Предложено Закари Уэром в [bpo-20035](https://python-all.ru/3.15/whatsnew/3.5.html).)11401141### traceback11421143Новые функции [`walk_stack()`](https://python-all.ru/3.15/library/traceback.html#traceback.walk_stack) и [`walk_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.walk_tb) для удобного обхода объектов фреймов и [объектов traceback](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects). (Предложено Робертом Коллинзом в [bpo-17911](https://python-all.ru/3.15/whatsnew/3.5.html).)11441145Новые облегчённые классы: [`TracebackException`](https://python-all.ru/3.15/library/traceback.html#traceback.TracebackException), [`StackSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary) и [`FrameSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.FrameSummary). (Предложено Робертом Коллинзом в [bpo-17911](https://python-all.ru/3.15/whatsnew/3.5.html).)11461147Обе функции [`print_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_tb) и [`print_stack()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_stack) теперь поддерживают отрицательные значения для аргумента *limit*. (Предложено Дмитрием Казаковым в [bpo-22619](https://python-all.ru/3.15/whatsnew/3.5.html).)11481149### types11501151Новая функция [`coroutine()`](https://python-all.ru/3.15/library/types.html#types.coroutine) для преобразования [генераторов](https://python-all.ru/3.15/glossary.html#term-generator-iterator) и объектов [`generator-like`](https://python-all.ru/3.15/library/collections.abc.html#collections.abc.Generator) в [ожидаемые объекты](https://python-all.ru/3.15/glossary.html#term-awaitable). (Предложено Юрием Селивановым в [bpo-24017](https://python-all.ru/3.15/whatsnew/3.5.html).)11521153Новый тип с именем [`CoroutineType`](https://python-all.ru/3.15/library/types.html#types.CoroutineType), который используется для объектов [корутин](https://python-all.ru/3.15/glossary.html#term-coroutine), создаваемых функциями [`async def`](https://python-all.ru/3.15/reference/compound_stmts.html#async-def). (Предложено Юрием Селивановым в [bpo-24400](https://python-all.ru/3.15/whatsnew/3.5.html).)11541155### unicodedata11561157Модуль [`unicodedata`](https://python-all.ru/3.15/library/unicodedata.html#module-unicodedata) теперь использует данные из [Unicode 8.0.0](https://python-all.ru/3.15/whatsnew/3.5.html).11581159### unittest11601161Метод [`TestLoader.loadTestsFromModule()`](https://python-all.ru/3.15/library/unittest.html#unittest.TestLoader.loadTestsFromModule) теперь принимает ключевой аргумент *pattern*, который передаётся в `load_tests` в качестве третьего аргумента. Найденные пакеты теперь проверяются на наличие `load_tests` независимо от того, совпадает ли их путь с *pattern*, потому что имя пакета не может совпадать с шаблоном по умолчанию. (Предложено Робертом Коллинзом и Барри А. Варшавой в [bpo-16662](https://python-all.ru/3.15/whatsnew/3.5.html).)11621163Ошибки обнаружения тестов теперь доступны в атрибуте [`TestLoader.errors`](https://python-all.ru/3.15/library/unittest.html#unittest.TestLoader.errors) экземпляра [`TestLoader`](https://python-all.ru/3.15/library/unittest.html#unittest.TestLoader). (Предложено Робертом Коллинзом в [bpo-19746](https://python-all.ru/3.15/whatsnew/3.5.html).)11641165Новый параметр командной строки `--locals` для отображения локальных переменных в трассировках. (Предложено Робертом Коллинзом в [bpo-22936](https://python-all.ru/3.15/whatsnew/3.5.html).)11661167### unittest.mock11681169Класс [`Mock`](https://python-all.ru/3.15/library/unittest.mock.html#unittest.mock.Mock) получил следующие улучшения:11701171- Конструктор класса получил новый параметр *unsafe*, который заставляет объекты mock вызывать [`AttributeError`](https://python-all.ru/3.15/library/exceptions.html#AttributeError) для имён атрибутов, начинающихся с `"assert"`. (Предложено Кушалом Дасом в [bpo-21238](https://python-all.ru/3.15/whatsnew/3.5.html).)1172- Новый метод [`Mock.assert_not_called()`](https://python-all.ru/3.15/library/unittest.mock.html#unittest.mock.Mock.assert_not_called) для проверки, был ли вызван объект mock. (Предложено Кушалом Дасом в [bpo-21262](https://python-all.ru/3.15/whatsnew/3.5.html).)11731174Класс [`MagicMock`](https://python-all.ru/3.15/library/unittest.mock.html#unittest.mock.MagicMock) теперь поддерживает операторы [`__truediv__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__truediv__), [`__divmod__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__divmod__) и [`__matmul__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__matmul__). (Предложено Йоханнесом Байтером в [bpo-20968](https://python-all.ru/3.15/whatsnew/3.5.html), и Хоканом Лёвдалем в [bpo-23581](https://python-all.ru/3.15/whatsnew/3.5.html) и [bpo-23568](https://python-all.ru/3.15/whatsnew/3.5.html).)11751176Больше нет необходимости явно передавать `create=True` функции [`patch()`](https://python-all.ru/3.15/library/unittest.mock.html#unittest.mock.patch) при подмене встроенных имён. (Предложено Кушалом Дасом в [bpo-17660](https://python-all.ru/3.15/whatsnew/3.5.html).)11771178### urllib11791180Новый класс [`request.HTTPPasswordMgrWithPriorAuth`](https://python-all.ru/3.15/library/urllib.request.html#urllib.request.HTTPPasswordMgrWithPriorAuth) позволяет управлять учётными данными HTTP Basic Authentication, чтобы исключить ненужную обработку ответа `401` или безусловно отправлять учётные данные в первом запросе для взаимодействия с серверами, которые возвращают ответ `404` вместо `401`, если заголовок `Authorization` не отправлен. (Предложено Матеем Цеплом в [bpo-19494](https://python-all.ru/3.15/whatsnew/3.5.html) и Акшитом Кхураной в [bpo-7159](https://python-all.ru/3.15/whatsnew/3.5.html).)11811182Новый аргумент *quote\_via* для функции [`parse.urlencode()`](https://python-all.ru/3.15/library/urllib.parse.html#urllib.parse.urlencode) предоставляет способ управлять кодировкой частей запроса при необходимости. (Предложено Samwyse и Арноном Яари в [bpo-13866](https://python-all.ru/3.15/whatsnew/3.5.html).)11831184Функция [`request.urlopen()`](https://python-all.ru/3.15/library/urllib.request.html#urllib.request.urlopen) принимает объект [`ssl.SSLContext`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLContext) в качестве аргумента *context*, который будет использоваться для HTTPS-соединения. (Предложено Алексом Гейнором в [bpo-22366](https://python-all.ru/3.15/whatsnew/3.5.html).)11851186The [`parse.urljoin()`](https://python-all.ru/3.15/library/urllib.parse.html#urllib.parse.urljoin) was updated to use the [**RFC 3986**](https://python-all.ru/3.15/whatsnew/3.5.html) semantics for the resolution of relative URLs, rather than [**RFC 1808**](https://python-all.ru/3.15/whatsnew/3.5.html) and [**RFC 2396**](https://python-all.ru/3.15/whatsnew/3.5.html). (Contributed by Demian Brecht and Senthil Kumaran in [bpo-22118](https://python-all.ru/3.15/whatsnew/3.5.html).)11871188### wsgiref11891190Аргумент *headers* конструктора класса [`headers.Headers`](https://python-all.ru/3.15/library/wsgiref.html#wsgiref.headers.Headers) теперь необязателен. (Авторы: Pablo Torres Navarrete и SilentGhost в [bpo-5800](https://python-all.ru/3.15/whatsnew/3.5.html).)11911192### xmlrpc11931194Класс [`client.ServerProxy`](https://python-all.ru/3.15/library/xmlrpc.client.html#xmlrpc.client.ServerProxy) теперь поддерживает протокол [контекстного менеджера](https://python-all.ru/3.15/glossary.html#term-context-manager). (Автор: Claudiu Popa в [bpo-20627](https://python-all.ru/3.15/whatsnew/3.5.html).)11951196Конструктор [`client.ServerProxy`](https://python-all.ru/3.15/library/xmlrpc.client.html#xmlrpc.client.ServerProxy) теперь принимает необязательный экземпляр [`ssl.SSLContext`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLContext). (Автор: Alex Gaynor в [bpo-22960](https://python-all.ru/3.15/whatsnew/3.5.html).)11971198### xml.sax11991200SAX-парсеры теперь поддерживают символьный поток объекта [`xmlreader.InputSource`](https://python-all.ru/3.15/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource). (Автор: Serhiy Storchaka в [bpo-2175](https://python-all.ru/3.15/whatsnew/3.5.html).)12011202[`parseString()`](https://python-all.ru/3.15/library/xml.sax.html#xml.sax.parseString) теперь принимает экземпляр [`str`](https://python-all.ru/3.15/library/stdtypes.html#str). (Автор: Serhiy Storchaka в [bpo-10590](https://python-all.ru/3.15/whatsnew/3.5.html).)12031204### zipfile12051206Вывод ZIP теперь можно записывать в непозиционируемые потоки. (Автор: Serhiy Storchaka в [bpo-23252](https://python-all.ru/3.15/whatsnew/3.5.html).)12071208Аргумент *mode* метода [`ZipFile.open()`](https://python-all.ru/3.15/library/zipfile.html#zipfile.ZipFile.open) теперь принимает `"x"` для запроса эксклюзивного создания. (Автор: Serhiy Storchaka в [bpo-21717](https://python-all.ru/3.15/whatsnew/3.5.html).)12091210## Прочие изменения на уровне модулей12111212Многие функции в модулях [`mmap`](https://python-all.ru/3.15/library/mmap.html#module-mmap), `ossaudiodev`, [`socket`](https://python-all.ru/3.15/library/socket.html#module-socket), [`ssl`](https://python-all.ru/3.15/library/ssl.html#module-ssl) и [`codecs`](https://python-all.ru/3.15/library/codecs.html#module-codecs) теперь принимают записываемые [байтоподобные объекты](https://python-all.ru/3.15/glossary.html#term-bytes-like-object). (Автор: Serhiy Storchaka в [bpo-23001](https://python-all.ru/3.15/whatsnew/3.5.html).)12131214## Оптимизации12151216Функция [`os.walk()`](https://python-all.ru/3.15/library/os.html#os.walk) ускорена в 3–5 раз на POSIX-системах и в 7–20 раз на Windows. Это было сделано с помощью новой функции [`os.scandir()`](https://python-all.ru/3.15/library/os.html#os.scandir), которая предоставляет информацию о файлах из системных вызовов `readdir` или `FindFirstFile`/`FindNextFile`. (Автор: Ben Hoyt при содействии Victor Stinner в [bpo-23605](https://python-all.ru/3.15/whatsnew/3.5.html).)12171218Создание `bytes(int)` (заполненного нулевыми байтами) стало быстрее и использует меньше памяти для больших объектов. Для выделения памяти под эти объекты применяется `calloc()` вместо `malloc()`. (Автор: Victor Stinner в [bpo-21233](https://python-all.ru/3.15/whatsnew/3.5.html).)12191220Некоторые операции над [`ipaddress`](https://python-all.ru/3.15/library/ipaddress.html#module-ipaddress), [`IPv4Network`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv6Network) значительно ускорены, например [`subnets()`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv4Network.subnets), [`supernet()`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.IPv4Network.supernet), [`summarize_address_range()`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.summarize_address_range), [`collapse_addresses()`](https://python-all.ru/3.15/library/ipaddress.html#ipaddress.collapse_addresses). Ускорение может составлять от 3 до 15 раз. (Авторы: Antoine Pitrou, Michel Albert и Markus в [bpo-21486](https://python-all.ru/3.15/whatsnew/3.5.html), [bpo-21487](https://python-all.ru/3.15/whatsnew/3.5.html), [bpo-20826](https://python-all.ru/3.15/whatsnew/3.5.html), [bpo-23266](https://python-all.ru/3.15/whatsnew/3.5.html).)12211222Сериализация объектов [`ipaddress`](https://python-all.ru/3.15/library/ipaddress.html#module-ipaddress) оптимизирована для получения значительно меньшего вывода. (Автор: Serhiy Storchaka в [bpo-23133](https://python-all.ru/3.15/whatsnew/3.5.html).)12231224Многие операции над [`io.BytesIO`](https://python-all.ru/3.15/library/io.html#io.BytesIO) теперь выполняются на 50–100% быстрее. (Авторы: Serhiy Storchaka в [bpo-15381](https://python-all.ru/3.15/whatsnew/3.5.html) и David Wilson в [bpo-22003](https://python-all.ru/3.15/whatsnew/3.5.html).)12251226Функция [`marshal.dumps()`](https://python-all.ru/3.15/library/marshal.html#marshal.dumps) теперь работает быстрее: на 65–85% для версий 3 и 4, на 20–25% для версий 0–2 на типичных данных и до 5 раз в лучших случаях. (Автор: Serhiy Storchaka в [bpo-20416](https://python-all.ru/3.15/whatsnew/3.5.html) и [bpo-23344](https://python-all.ru/3.15/whatsnew/3.5.html).)12271228Кодировщик UTF-32 теперь работает в 3–7 раз быстрее. (Автор: Serhiy Storchaka в [bpo-15027](https://python-all.ru/3.15/whatsnew/3.5.html).)12291230Регулярные выражения теперь разбираются до 10% быстрее. (Автор: Serhiy Storchaka в [bpo-19380](https://python-all.ru/3.15/whatsnew/3.5.html).)12311232Функция [`json.dumps()`](https://python-all.ru/3.15/library/json.html#json.dumps) оптимизирована так, что работает с `ensure_ascii=False` так же быстро, как с `ensure_ascii=True`. (Автор: Naoki Inada в [bpo-23206](https://python-all.ru/3.15/whatsnew/3.5.html).)12331234Функции [`PyObject_IsInstance()`](https://python-all.ru/3.15/c-api/object.html#c.PyObject_IsInstance) и [`PyObject_IsSubclass()`](https://python-all.ru/3.15/c-api/object.html#c.PyObject_IsSubclass) ускорены в типичном случае, когда второй аргумент имеет [`type`](https://python-all.ru/3.15/library/functions.html#type) в качестве метакласса. (Автор: Georg Brandl в [bpo-22540](https://python-all.ru/3.15/whatsnew/3.5.html).)12351236Кеширование методов было немного улучшено, что дало до 5% прироста производительности в некоторых тестах. (Автор: Antoine Pitrou в [bpo-22847](https://python-all.ru/3.15/whatsnew/3.5.html).)12371238Объекты из модуля [`random`](https://python-all.ru/3.15/library/random.html#module-random) теперь используют на 50% меньше памяти в 64-битных сборках. (Автор: Serhiy Storchaka в [bpo-23488](https://python-all.ru/3.15/whatsnew/3.5.html).)12391240Вызовы геттера [`property()`](https://python-all.ru/3.15/library/functions.html#property) стали до 25% быстрее. (Автор: Joe Jevnik в [bpo-23910](https://python-all.ru/3.15/whatsnew/3.5.html).)12411242Создание экземпляра [`fractions.Fraction`](https://python-all.ru/3.15/library/fractions.html#fractions.Fraction) теперь до 30% быстрее. (Автор: Stefan Behnel в [bpo-22464](https://python-all.ru/3.15/whatsnew/3.5.html).)12431244Строковые методы [`find()`](https://python-all.ru/3.15/library/stdtypes.html#str.find), [`rfind()`](https://python-all.ru/3.15/library/stdtypes.html#str.rfind), [`split()`](https://python-all.ru/3.15/library/stdtypes.html#str.split), [`partition()`](https://python-all.ru/3.15/library/stdtypes.html#str.partition) и оператор [`in`](https://python-all.ru/3.15/reference/expressions.html#in) теперь значительно быстрее при поиске подстрок из одного символа. (Автор: Serhiy Storchaka в [bpo-23573](https://python-all.ru/3.15/whatsnew/3.5.html).)12451246## Изменения в сборке и C API12471248Добавлены новые функции `calloc`:12491250- [`PyMem_RawCalloc()`](https://python-all.ru/3.15/c-api/memory.html#c.PyMem_RawCalloc),1251- [`PyMem_Calloc()`](https://python-all.ru/3.15/c-api/memory.html#c.PyMem_Calloc),1252- [`PyObject_Calloc()`](https://python-all.ru/3.15/c-api/memory.html#c.PyObject_Calloc).12531254(Автор: Victor Stinner в [bpo-21233](https://python-all.ru/3.15/whatsnew/3.5.html).)12551256Новые вспомогательные функции кодирования/декодирования:12571258- [`Py_DecodeLocale()`](https://python-all.ru/3.15/c-api/sys.html#c.Py_DecodeLocale) (заменён `_Py_char2wchar()`),1259- [`Py_EncodeLocale()`](https://python-all.ru/3.15/c-api/sys.html#c.Py_EncodeLocale) (заменён `_Py_wchar2char()`).12601261(Предложено Victor Stinner в [bpo-18395](https://python-all.ru/3.15/whatsnew/3.5.html).)12621263Новая функция [`PyCodec_NameReplaceErrors()`](https://python-all.ru/3.15/c-api/codec.html#c.PyCodec_NameReplaceErrors) для замены ошибки кодирования unicode на управляющие последовательности `\N{...}`. (Предложено Serhiy Storchaka в [bpo-19676](https://python-all.ru/3.15/whatsnew/3.5.html).)12641265Новая функция [`PyErr_FormatV()`](https://python-all.ru/3.15/c-api/exceptions.html#c.PyErr_FormatV), аналогичная [`PyErr_Format()`](https://python-all.ru/3.15/c-api/exceptions.html#c.PyErr_Format), но принимающая аргумент `va_list`. (Предложено Antoine Pitrou в [bpo-18711](https://python-all.ru/3.15/whatsnew/3.5.html).)12661267Новое исключение [`PyExc_RecursionError`](https://python-all.ru/3.15/c-api/exceptions.html#c.PyExc_RecursionError). (Предложено Georg Brandl в [bpo-19235](https://python-all.ru/3.15/whatsnew/3.5.html).)12681269Новые функции [`PyModule_FromDefAndSpec()`](https://python-all.ru/3.15/c-api/module.html#c.PyModule_FromDefAndSpec), [`PyModule_FromDefAndSpec2()`](https://python-all.ru/3.15/c-api/module.html#c.PyModule_FromDefAndSpec2) и [`PyModule_ExecDef()`](https://python-all.ru/3.15/c-api/module.html#c.PyModule_ExecDef), введённые [**PEP 489**](https://python-all.ru/3.15/whatsnew/3.5.html) – многофазная инициализация модулей расширения. (Предложено Petr Viktorin в [bpo-24268](https://python-all.ru/3.15/whatsnew/3.5.html).)12701271Новые функции [`PyNumber_MatrixMultiply()`](https://python-all.ru/3.15/c-api/number.html#c.PyNumber_MatrixMultiply) и [`PyNumber_InPlaceMatrixMultiply()`](https://python-all.ru/3.15/c-api/number.html#c.PyNumber_InPlaceMatrixMultiply) для умножения матриц. (Предложено Benjamin Peterson в [bpo-21176](https://python-all.ru/3.15/whatsnew/3.5.html). См. также [**PEP 465**](https://python-all.ru/3.15/whatsnew/3.5.html) для подробностей.)12721273Слот [`PyTypeObject.tp_finalize`](https://python-all.ru/3.15/c-api/typeobj.html#c.PyTypeObject.tp_finalize) теперь является частью стабильного ABI.12741275Сборки для Windows теперь требуют Microsoft Visual C++ 14.0, который доступен в составе [Visual Studio 2015](https://python-all.ru/3.15/whatsnew/3.5.html).12761277Модули расширения теперь включают метку информации о платформе в своё имя файла на некоторых платформах (метка необязательна, и CPython будет импортировать расширения без неё, хотя если метка присутствует и не совпадает, расширение не будет загружено):12781279- На Linux имена файлов модулей расширения заканчиваются на `.cpython-<major><minor>m-<architecture>-<os>.pyd`:12801281  - `<major>` – это старший номер версии Python; для Python 3.5 это `3`.1282  - `<minor>` – это младший номер версии Python; для Python 3.5 это `5`.1283  - `<architecture>` – это аппаратная архитектура, для которой был собран модуль расширения. Чаще всего это `i386` для 32-битных Intel платформ или `x86_64` для 64-битных Intel (и AMD) платформ.1284  - `<os>` всегда равен `linux-gnu`, за исключением расширений, собранных для работы с 32-битным ABI на 64-битных платформах; в этом случае он равен `linux-gnu32``<architecture>` будет `x86_64`).1285- На Windows имена файлов модулей расширения заканчиваются на `<debug>.cp<major><minor>-<platform>.pyd`:12861287  - `<major>` – это старший номер версии Python; для Python 3.5 это `3`.1288  - `<minor>` – это младший номер версии Python; для Python 3.5 это `5`.1289  - `<platform>` – это платформа, для которой был собран модуль расширения: `win32` для Win32, `win_amd64` для Win64, `win_ia64` для Windows Itanium 64 и `win_arm` для Windows на ARM.1290  - Если собрано в режиме отладки, `<debug>` будет `_d`, иначе он будет пустым.1291- На платформах OS X имена файлов модулей расширения теперь заканчиваются на `-darwin.so`.1292- На всех остальных платформах имена файлов модулей расширения такие же, как в Python 3.4.12931294## Устарело12951296### Новые ключевые слова12971298`async` и `await` не рекомендуется использовать в качестве имён переменных, классов, функций или модулей. Введённые [**PEP 492**](https://python-all.ru/3.15/whatsnew/3.5.html) в Python 3.5, они станут полноценными ключевыми словами в Python 3.7.12991300### Устаревшее поведение Python13011302Возбуждение исключения [`StopIteration`](https://python-all.ru/3.15/library/exceptions.html#StopIteration) внутри генератора теперь будет вызывать скрытое [`PendingDeprecationWarning`](https://python-all.ru/3.15/library/exceptions.html#PendingDeprecationWarning), которое станет явным предупреждением об устаревании в Python 3.6 и вызовет [`RuntimeError`](https://python-all.ru/3.15/library/exceptions.html#RuntimeError) в Python 3.7. См. [PEP 479: Change StopIteration handling inside generators](https://python-all.ru/3.15/whatsnew/3.5.html#whatsnew-pep-479) для подробностей.13031304### Неподдерживаемые операционные системы13051306Windows XP больше не поддерживается Microsoft, поэтому в соответствии с [**PEP 11**](https://python-all.ru/3.15/whatsnew/3.5.html) CPython 3.5 официально больше не поддерживается на этой ОС.13071308### Устаревшие модули, функции и методы Python13091310Модуль `formatter` теперь полностью устарел и по-прежнему планируется к удалению в Python 3.6.13111312Функция `asyncio.async()` устарела; вместо неё следует использовать [`ensure_future()`](https://python-all.ru/3.15/library/asyncio-future.html#asyncio.ensure_future).13131314Модуль `smtpd` в прошлом всегда декодировал часть DATA сообщений электронной почты с помощью кодеков `utf-8`. Теперь это можно контролировать с помощью нового ключевого слова *decode\_data* в функции `SMTPServer`. Значение по умолчанию – `True`, но это значение по умолчанию устарело. Укажите ключевое слово *decode\_data* с подходящим значением, чтобы избежать предупреждения об устаревании.13151316Прямое присваивание значений атрибутам [`key`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.key), [`value`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.value) и [`coded_value`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.coded_value) объектов [`http.cookies.Morsel`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel) устарело. Вместо этого используйте метод [`set()`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.set). Кроме того, недокументированный параметр *LegalChars* функции `set()` устарел и теперь игнорируется.13171318Передача строки формата в качестве ключевого аргумента *format\_string* методу [`format()`](https://python-all.ru/3.15/library/string.html#string.Formatter.format) класса [`string.Formatter`](https://python-all.ru/3.15/library/string.html#string.Formatter) устарела. (Предложено Сергеем Сторчакой в [bpo-23671](https://python-all.ru/3.15/whatsnew/3.5.html).)13191320Функции `platform.dist()` и `platform.linux_distribution()` теперь устарели. Дистрибутивы Linux используют слишком много разных способов описания себя, поэтому функциональность оставлена на усмотрение пакета. (Предложено Vajrasky Kok и Berker Peksag в [bpo-1322](https://python-all.ru/3.15/whatsnew/3.5.html).)13211322Ранее недокументированные методы `from_function` и `from_builtin` класса [`inspect.Signature`](https://python-all.ru/3.15/library/inspect.html#inspect.Signature) устарели. Вместо них используйте новый метод [`Signature.from_callable()`](https://python-all.ru/3.15/library/inspect.html#inspect.Signature.from_callable). (Предложено Юрием Селивановым в [bpo-24248](https://python-all.ru/3.15/whatsnew/3.5.html).)13231324Функция `inspect.getargspec()` устарела и запланирована к удалению в Python 3.6. (Подробнее см. [bpo-20438](https://python-all.ru/3.15/whatsnew/3.5.html).)13251326Функции [`inspect`](https://python-all.ru/3.15/library/inspect.html#module-inspect) [`getfullargspec()`](https://python-all.ru/3.15/library/inspect.html#inspect.getfullargspec), [`getcallargs()`](https://python-all.ru/3.15/library/inspect.html#inspect.getcallargs) и `formatargspec()` устарели; вместо них следует использовать [`inspect.signature()`](https://python-all.ru/3.15/library/inspect.html#inspect.signature) API. (Предложено Юрием Селивановым в [bpo-20438](https://python-all.ru/3.15/whatsnew/3.5.html).)13271328Функции [`getargvalues()`](https://python-all.ru/3.15/library/inspect.html#inspect.getargvalues) и [`formatargvalues()`](https://python-all.ru/3.15/library/inspect.html#inspect.formatargvalues) были случайно помечены как устаревшие в выпуске Python 3.5.0.13291330Использование флага [`re.LOCALE`](https://python-all.ru/3.15/library/re.html#re.LOCALE) с шаблонами str или [`re.ASCII`](https://python-all.ru/3.15/library/re.html#re.ASCII) теперь устарело. (Предложено Сергеем Сторчакой в [bpo-22407](https://python-all.ru/3.15/whatsnew/3.5.html).)13311332Использование нераспознаваемых специальных последовательностей, состоящих из `'\'` и буквы ASCII, в шаблонах регулярных выражений и шаблонах замены теперь вызывает предупреждение об устаревании и будет запрещено в Python 3.6. (Предложено Сергеем Сторчакой в [bpo-23622](https://python-all.ru/3.15/whatsnew/3.5.html).)13331334Недокументированный и неофициальный аргумент по умолчанию *use\_load\_tests* метода [`unittest.TestLoader.loadTestsFromModule()`](https://python-all.ru/3.15/library/unittest.html#unittest.TestLoader.loadTestsFromModule) теперь устарел и игнорируется. (Предложено Robert Collins и Barry A. Warsaw в [bpo-16662](https://python-all.ru/3.15/whatsnew/3.5.html).)13351336## Удалено13371338### Удаление API и функций13391340Следующие устаревшие и ранее объявленные устаревшими API и функции были удалены:13411342- Атрибут `__version__` был удалён из пакета email. Код email уже давно не поставлялся отдельно от стандартной библиотеки, а строка `__version__` не обновлялась в последних нескольких выпусках.1343- Внутренний класс `Netrc` в модуле [`ftplib`](https://python-all.ru/3.15/library/ftplib.html#module-ftplib) был объявлен устаревшим в версии 3.4 и теперь удалён. (Предложено Matt Chaput в [bpo-6623](https://python-all.ru/3.15/whatsnew/3.5.html).)1344- Концепция файлов `.pyo` была удалена.1345- Класс JoinableQueue в экспериментальном модуле [`asyncio`](https://python-all.ru/3.15/library/asyncio.html#module-asyncio) был объявлен устаревшим в версии 3.4.4 и теперь удалён. (Предложено A. Jesse Jiryu Davis в [bpo-23464](https://python-all.ru/3.15/whatsnew/3.5.html).)13461347## Переход на Python 3.513481349В этом разделе перечислены ранее описанные изменения и другие исправления ошибок, которые могут потребовать изменений в вашем коде.13501351### Изменения в поведении Python13521353- Из-за недосмотра более ранние версии Python ошибочно принимали следующий синтаксис:13541355  ```python1356  f(1 for x in [1], *args)1357  f(1 for x in [1], **kwargs)1358  ```13591360  Python 3.5 теперь корректно вызывает исключение [`SyntaxError`](https://python-all.ru/3.15/library/exceptions.html#SyntaxError), так как выражения-генераторы должны быть заключены в круглые скобки, если они не являются единственным аргументом функции.13611362### Изменения в Python API13631364- [**PEP 475**](https://python-all.ru/3.15/whatsnew/3.5.html): Системные вызовы теперь повторяются при прерывании сигналом вместо возбуждения [`InterruptedError`](https://python-all.ru/3.15/library/exceptions.html#InterruptedError), если обработчик сигнала Python не возбуждает исключение.1365- До Python 3.5 объект [`datetime.time`](https://python-all.ru/3.15/library/datetime.html#datetime.time) считался ложным, если он представлял полночь по UTC. Такое поведение считалось неочевидным и подверженным ошибкам и было удалено в Python 3.5. Подробнее см. [bpo-13936](https://python-all.ru/3.15/whatsnew/3.5.html).1366- Метод `ssl.SSLSocket.send()` теперь возбуждает либо [`ssl.SSLWantReadError`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLWantReadError), либо [`ssl.SSLWantWriteError`](https://python-all.ru/3.15/library/ssl.html#ssl.SSLWantWriteError) на неблокирующем сокете, если операция заблокируется. Ранее он возвращал `0`. (Предложено Nikolaus Rath в [bpo-20951](https://python-all.ru/3.15/whatsnew/3.5.html).)1367- Атрибут `__name__` генераторов теперь берётся из имени функции, а не из имени кода. Используйте `gen.gi_code.co_name` для получения имени кода. У генераторов также появился новый атрибут `__qualname__` – уточнённое имя, которое теперь используется для представления генератора (`repr(gen)`). (Предложено Victor Stinner в [bpo-21205](https://python-all.ru/3.15/whatsnew/3.5.html).)1368- Устаревший режим «strict» и аргумент функций [`HTMLParser`](https://python-all.ru/3.15/library/html.parser.html#html.parser.HTMLParser), `HTMLParser.error()` и исключения `HTMLParserError` были удалены. (Предложено Ezio Melotti в [bpo-15114](https://python-all.ru/3.15/whatsnew/3.5.html).) Аргумент *convert\_charrefs* функции `HTMLParser` теперь по умолчанию равен `True`. (Предложено Berker Peksag в [bpo-21047](https://python-all.ru/3.15/whatsnew/3.5.html).)1369- Хотя это формально не является частью API, для целей переноса (например, исправления тестов) стоит отметить, что сообщения об ошибках, которые ранее имели вид «'sometype' не поддерживает буферный протокол», теперь имеют вид «a [байтоподобный объект](https://python-all.ru/3.15/glossary.html#term-bytes-like-object) is required, not 'sometype'». (Предложено Ezio Melotti в [bpo-16518](https://python-all.ru/3.15/whatsnew/3.5.html).)1370- Если текущая директория установлена на директорию, которой больше не существует, то [`FileNotFoundError`](https://python-all.ru/3.15/library/exceptions.html#FileNotFoundError) больше не будет возбуждаться, а [`find_spec()`](https://python-all.ru/3.15/library/importlib.html#importlib.machinery.FileFinder.find_spec) вернёт `None` **без** кэширования `None` в [`sys.path_importer_cache`](https://python-all.ru/3.15/library/sys.html#sys.path_importer_cache), что отличается от типичного случая ([bpo-22834](https://python-all.ru/3.15/whatsnew/3.5.html)).1371- Коды состояния HTTP и сообщения из [`http.client`](https://python-all.ru/3.15/library/http.client.html#module-http.client) и [`http.server`](https://python-all.ru/3.15/library/http.server.html#module-http.server) были реорганизованы в общее перечисление [`HTTPStatus`](https://python-all.ru/3.15/library/http.html#http.HTTPStatus). Значения в `http.client` и `http.server` остаются доступными для обратной совместимости. (Автор: Demian Brecht, [bpo-21793](https://python-all.ru/3.15/whatsnew/3.5.html).)1372- Если загрузчик импорта определяет [`exec_module()`](https://python-all.ru/3.15/library/importlib.html#importlib.abc.Loader.exec_module), то ожидается, что он также определяет [`create_module()`](https://python-all.ru/3.15/library/importlib.html#importlib.abc.Loader.create_module) (сейчас это вызывает [`DeprecationWarning`](https://python-all.ru/3.15/library/exceptions.html#DeprecationWarning), а в Python 3.6 станет ошибкой). Если загрузчик наследует от [`importlib.abc.Loader`](https://python-all.ru/3.15/library/importlib.html#importlib.abc.Loader), то ничего делать не нужно; в противном случае просто определите `create_module()` так, чтобы он возвращал `None`. (Автор: Brett Cannon, [bpo-23014](https://python-all.ru/3.15/whatsnew/3.5.html).)1373- Функция [`re.split()`](https://python-all.ru/3.15/library/re.html#re.split) всегда игнорировала пустые совпадения с шаблоном, поэтому шаблон `"x*"` работал так же, как `"x+"`, а шаблон `"\b"` никогда не работал. Теперь `re.split()` выдаёт предупреждение, если шаблон может совпадать с пустой строкой. Для совместимости используйте шаблоны, которые никогда не совпадают с пустой строкой (например, `"x+"` вместо `"x*"`). Шаблоны, которые могут совпадать только с пустой строкой (такие как `"\b"`), теперь вызывают ошибку. (Автор: Serhiy Storchaka, [bpo-22818](https://python-all.ru/3.15/whatsnew/3.5.html).)1374- Интерфейс, подобный словарю, для [`http.cookies.Morsel`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel) стал самосогласованным: сравнение morsel теперь учитывает [`key`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.key) и [`value`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.value), [`copy()`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.copy) теперь возвращает экземпляр `Morsel`, а не [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict), а [`update()`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.update) теперь будет вызывать исключение, если какой-либо из ключей в обновляемом словаре недействителен. Кроме того, недокументированный параметр *LegalChars* функции [`set()`](https://python-all.ru/3.15/library/http.cookies.html#http.cookies.Morsel.set) устарел и теперь игнорируется. (Автор: Demian Brecht, [bpo-2211](https://python-all.ru/3.15/whatsnew/3.5.html).)1375- [**PEP 488**](https://python-all.ru/3.15/whatsnew/3.5.html) удалил файлы `.pyo` из Python и ввёл необязательный тег `opt-` в именах файлов `.pyc`. Функция [`importlib.util.cache_from_source()`](https://python-all.ru/3.15/library/importlib.html#importlib.util.cache_from_source) получила параметр *оптимизация* для управления тегом `opt-`. Из-за этого параметр *debug\_override* функции теперь устарел. Файлы `.pyo` больше не поддерживаются в качестве аргумента файла для интерпретатора Python и поэтому не имеют смысла при распространении по отдельности (то есть распространение кода без исходников). Поскольку магическое число для байт-кода изменилось в Python 3.5, все старые файлы `.pyo` из предыдущих версий Python недействительны вне зависимости от этого PEP.1376- Модуль [`socket`](https://python-all.ru/3.15/library/socket.html#module-socket) теперь экспортирует константу [`CAN_RAW_FD_FRAMES`](https://python-all.ru/3.15/library/socket.html#socket.CAN_RAW_FD_FRAMES) в linux 3.6 и выше.1377- Функция [`ssl.cert_time_to_seconds()`](https://python-all.ru/3.15/library/ssl.html#ssl.cert_time_to_seconds) теперь интерпретирует входное время как UTC, а не как местное время, в соответствии с [**RFC 5280**](https://python-all.ru/3.15/whatsnew/3.5.html). Кроме того, возвращаемое значение всегда является [`int`](https://python-all.ru/3.15/library/functions.html#int). (Автор: Akira Li, [bpo-19940](https://python-all.ru/3.15/whatsnew/3.5.html).)1378- Инструмент `pygettext.py` теперь использует стандартный формат +NNNN для часовых поясов в заголовке POT-Creation-Date.1379- Модуль [`smtplib`](https://python-all.ru/3.15/library/smtplib.html#module-smtplib) теперь использует [`sys.stderr`](https://python-all.ru/3.15/library/sys.html#sys.stderr) вместо предыдущей модульной переменной `stderr` для отладочного вывода. Если ваша (тестовая) программа зависит от подмены модульной переменной для захвата отладочного вывода, вам нужно обновить её, чтобы захватывать sys.stderr вместо этого.1380- Методы [`str.startswith()`](https://python-all.ru/3.15/library/stdtypes.html#str.startswith) и [`str.endswith()`](https://python-all.ru/3.15/library/stdtypes.html#str.endswith) больше не возвращают `True` при поиске пустой строки, если индексы полностью выходят за диапазон. (Автор: Serhiy Storchaka, [bpo-24284](https://python-all.ru/3.15/whatsnew/3.5.html).)1381- Функция [`inspect.getdoc()`](https://python-all.ru/3.15/library/inspect.html#inspect.getdoc) теперь возвращает строки документации, унаследованные от базовых классов. Строки документации больше не нужно дублировать, если унаследованная документация подходит. Чтобы подавить унаследованную строку, необходимо указать пустую строку (или документация может быть заполнена). Это изменение влияет на вывод модуля [`pydoc`](https://python-all.ru/3.15/library/pydoc.html#module-pydoc) и функции [`help()`](https://python-all.ru/3.15/library/functions.html#help). (Автор: Serhiy Storchaka, [bpo-15582](https://python-all.ru/3.15/whatsnew/3.5.html).)1382- Вложенные вызовы [`functools.partial()`](https://python-all.ru/3.15/library/functools.html#functools.partial) теперь уплощаются. Если предыдущее поведение использовалось, теперь можно добавить атрибут к объекту `functools.partial()` или создать подкласс `functools.partial()`. (Автор: Alexander Belopolsky, [bpo-7830](https://python-all.ru/3.15/whatsnew/3.5.html).)13831384### Изменения в C API13851386- Недокументированный член `format` (непубличной) структуры `PyMemoryViewObject` был удалён. Все расширения, полагающиеся на соответствующие части в `memoryobject.h`, должны быть пересобраны.1387- Структура `PyMemAllocator` была переименована в [`PyMemAllocatorEx`](https://python-all.ru/3.15/c-api/memory.html#c.PyMemAllocatorEx), и добавлено новое поле `calloc`.1388- Удалён недокументированный макрос `PyObject_REPR()`, который приводил к утечке ссылок. Используйте символ формата `%R` в функциях, подобных [`PyUnicode_FromFormat()`](https://python-all.ru/3.15/c-api/unicode.html#c.PyUnicode_FromFormat), для форматирования [`repr()`](https://python-all.ru/3.15/library/functions.html#repr) объекта. (Автор: Serhiy Storchaka, [bpo-22453](https://python-all.ru/3.15/whatsnew/3.5.html).)1389- Поскольку отсутствие атрибута [`__module__`](https://python-all.ru/3.15/reference/datamodel.html#type.__module__) нарушает сериализацию (pickling) и интроспекцию, теперь для встроенных типов без атрибута `__module__` выдаётся предупреждение об устаревании. В будущем это станет [`AttributeError`](https://python-all.ru/3.15/library/exceptions.html#AttributeError). (Автор: Serhiy Storchaka, [bpo-20204](https://python-all.ru/3.15/whatsnew/3.5.html).)1390- В рамках реализации [**PEP 492**](https://python-all.ru/3.15/whatsnew/3.5.html) слот `tp_reserved` структуры [`PyTypeObject`](https://python-all.ru/3.15/c-api/type.html#c.PyTypeObject) был заменён на слот [`tp_as_async`](https://python-all.ru/3.15/c-api/typeobj.html#c.PyTypeObject.tp_as_async). См. [Объекты корутин](https://python-all.ru/3.15/c-api/coro.html#coro-objects) для новых типов, структур и функций.13911392## Примечательные изменения в Python 3.5.413931394### Новая `make regen-all` цель сборки13951396Чтобы упростить кросс-компиляцию и гарантировать, что CPython можно надежно\\nсобрать без необходимости уже иметь установленную версию Python,\\nсистема сборки на основе autotools больше не пытается неявно\\nперекомпилировать сгенерированные файлы, ориентируясь на время их изменения.13971398Вместо этого была добавлена новая команда `make regen-all` для принудительной\\nперегенерации этих файлов при необходимости (например, после того, как начальная версия Python уже\\nбыла собрана на основе предварительно сгенерированных версий).13991400Также определены более выборочные цели регенерации – подробнее см.\\n[Makefile.pre.in](https://python-all.ru/src/3.15/Makefile.pre.in).14011402(Предложено Victor Stinner в [bpo-23404](https://python-all.ru/3.15/whatsnew/3.5.html).)14031404Добавлено в версии 3.5.4.14051406### Удаление `make touch` цели сборки14071408Цель сборки `make touch`, ранее использовавшаяся для запроса неявной перегенерации\\nсгенерированных файлов путем обновления времени их изменения, была удалена.14091410Она заменена новой целью `make regen-all`.14111412(Предложено Victor Stinner в [bpo-23404](https://python-all.ru/3.15/whatsnew/3.5.html).)14131414Изменено в версии 3.5.4.1415