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

3.5.md

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

1> **Источник:** https://python-all.ru/3.5/whatsnew/3.5.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Что нового в Python 3.589| Редакторы: | Elvis Pranskevichus \<[elvis@magic.io](https://python-all.ru/3.5/whatsnew/3.5.html)\>, Yury Selivanov \<[yury@magic.io](https://python-all.ru/3.5/whatsnew/3.5.html)\> |10| --- | --- |1112Эта статья описывает новые возможности Python 3.5 по сравнению с 3.4. Python 3.5 был выпущен 13 сентября 2015 года. Полный список изменений см. в [журнале изменений](https://python-all.ru/3.5/whatsnew/changelog.html#changelog).1314> **См. также**15>16> [**PEP 478**](https://python-all.ru/3.5/whatsnew/3.5.html) – График выпуска Python 3.51718## Итоги – основные изменения1920Новые синтаксические возможности:2122- [PEP 492](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-492), корутины с синтаксисом async и await.23- [PEP 465](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-465), новый оператор умножения матриц: `a @ b`.24- [PEP 448](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-448), дополнительные обобщения распаковки.2526Новые модули библиотеки:2728- [`typing`](https://python-all.ru/3.5/library/typing.html#module-typing): [PEP 484 – Аннотации типов](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-484).29- [`zipapp`](https://python-all.ru/3.5/library/zipapp.html#module-zipapp): [PEP 441 – Улучшение поддержки ZIP-приложений Python](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-zipapp).3031Новые встроенные возможности:3233- `bytes % args`, `bytearray % args`: [PEP 461](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-461) – Добавление форматирования `%` для bytes и bytearray.34- Новые методы [`bytes.hex()`](https://python-all.ru/3.5/library/stdtypes.html#bytes.hex), [`bytearray.hex()`](https://python-all.ru/3.5/library/stdtypes.html#bytearray.hex) и [`memoryview.hex()`](https://python-all.ru/3.5/library/stdtypes.html#memoryview.hex). (Автор: Arnon Yaari в [bpo-9951](https://python-all.ru/3.5/whatsnew/3.5.html).)35- [`memoryview`](https://python-all.ru/3.5/library/stdtypes.html#memoryview) теперь поддерживает индексацию кортежей (включая многомерную). (Автор: Antoine Pitrou в [bpo-23632](https://python-all.ru/3.5/whatsnew/3.5.html).)36- У генераторов появился новый атрибут `gi_yieldfrom`, который возвращает объект, итерируемый выражениями `yield from`. (Авторы: Benno Leslie и Yury Selivanov в [bpo-24450](https://python-all.ru/3.5/whatsnew/3.5.html).)37- Теперь при достижении максимальной глубины рекурсии возбуждается новое исключение [`RecursionError`](https://python-all.ru/3.5/library/exceptions.html#RecursionError). (Автор: Georg Brandl в [bpo-19235](https://python-all.ru/3.5/whatsnew/3.5.html).)3839Улучшения реализации CPython:4041- Когда `LC_TYPE` локаль является локалью POSIX (`C` локаль), [`sys.stdin`](https://python-all.ru/3.5/library/sys.html#sys.stdin) и [`sys.stdout`](https://python-all.ru/3.5/library/sys.html#sys.stdout) теперь используют обработчик ошибок `surrogateescape`, вместо обработчика ошибок `strict`. (Автор: Victor Stinner в [bpo-19977](https://python-all.ru/3.5/whatsnew/3.5.html).)42- Файлы `.pyo` больше не используются; вместо них используется более гибкая схема, которая явно включает уровень оптимизации в имя `.pyc`. (См. [обзор PEP 488](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-488).)43- Встроенные модули и модули расширений теперь инициализируются в многофазном процессе, аналогичном загрузке модулей Python. (См. [обзор PEP 489](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-489).)4445Значительные улучшения в стандартной библиотеке:4647- [`collections.OrderedDict`](https://python-all.ru/3.5/library/collections.html#collections.OrderedDict) is now [implemented in C](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-ordereddict), which makes it 4 to 100 times faster.48- The [`ssl`](https://python-all.ru/3.5/library/ssl.html#module-ssl) module gained [support for Memory BIO](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-sslmemorybio), which decouples SSL protocol handling from network IO.49- The new [`os.scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) function provides a [better and significantly faster way](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-471) of directory traversal.50- [`functools.lru_cache()`](https://python-all.ru/3.5/library/functools.html#functools.lru_cache) has been mostly [reimplemented in C](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-lrucache), yielding much better performance.51- The new [`subprocess.run()`](https://python-all.ru/3.5/library/subprocess.html#subprocess.run) function provides a [streamlined way to run subprocesses](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-subprocess).52- The [`traceback`](https://python-all.ru/3.5/library/traceback.html#module-traceback) module has been significantly [enhanced](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-traceback) for improved performance and developer convenience.5354Улучшения в области безопасности:5556- SSLv3 теперь отключён во всей стандартной библиотеке. Его можно включить, вручную создав экземпляр [`ssl.SSLContext`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLContext). (Подробнее см. [bpo-22638](https://python-all.ru/3.5/whatsnew/3.5.html); это изменение было перенесено в CPython 3.4 и 2.7.)57- Разбор HTTP-куки теперь выполняется более строго для защиты от потенциальных атак внедрения. (Предложено Антуаном Питу в [bpo-22796](https://python-all.ru/3.5/whatsnew/3.5.html).)5859Улучшения для Windows:6061- A new installer for Windows has replaced the old MSI. See [Using Python on Windows](https://python-all.ru/3.5/using/windows.html#using-on-windows) for more information.62- Сборки для Windows теперь используют Microsoft Visual C++ 14.0, и модули расширения должны использовать ту же версию.6364Читайте далее полный список изменений, влияющих на пользователей, включая множество других небольших улучшений, оптимизаций CPython, устаревших возможностей и потенциальных проблем при переносе.6566## Новые возможности6768### PEP 492 – Корутины с синтаксисом async и await6970[**PEP 492**](https://python-all.ru/3.5/whatsnew/3.5.html) greatly improves support for asynchronous programming in Python by adding [awaitable objects](https://python-all.ru/3.5/glossary.html#term-awaitable), [coroutine functions](https://python-all.ru/3.5/glossary.html#term-coroutine-function), [asynchronous iteration](https://python-all.ru/3.5/glossary.html#term-asynchronous-iterable), and [asynchronous context managers](https://python-all.ru/3.5/glossary.html#term-asynchronous-context-manager).7172Корутинные функции объявляются с помощью нового синтаксиса [`async def`](https://python-all.ru/3.5/reference/compound_stmts.html#async-def):7374```python75>>> async def coro():76...     return 'spam'77```7879Inside a coroutine function, the new [`await`](https://python-all.ru/3.5/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.5/glossary.html#term-awaitable) protocol by defining the [`__await__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__await__) method.8081PEP 492 также добавляет оператор [`async for`](https://python-all.ru/3.5/reference/compound_stmts.html#async-for) для удобной итерации по асинхронным итерируемым объектам.8283Пример простейшего HTTP-клиента, написанного с использованием нового синтаксиса:8485```python86import asyncio8788async def http_get(domain):89    reader, writer = await asyncio.open_connection(domain, 80)9091    writer.write(b'\r\n'.join([92        b'GET / HTTP/1.1',93        b'Host: %b' % domain.encode('latin-1'),94        b'Connection: close',95        b'', b''96    ]))9798    async for line in reader:99        print('>>>', line)100101    writer.close()102103loop = asyncio.get_event_loop()104try:105    loop.run_until_complete(http_get('example.com'))106finally:107    loop.close()108```109110По аналогии с асинхронной итерацией существует новый синтаксис для асинхронных контекстных менеджеров. Следующий скрипт:111112```python113import asyncio114115async def coro(name, lock):116    print('coro {}: waiting for lock'.format(name))117    async with lock:118        print('coro {}: holding the lock'.format(name))119        await asyncio.sleep(1)120        print('coro {}: releasing the lock'.format(name))121122loop = asyncio.get_event_loop()123lock = asyncio.Lock()124coros = asyncio.gather(coro(1, lock), coro(2, lock))125try:126    loop.run_until_complete(coros)127finally:128    loop.close()129```130131выведет:132133```python134coro 2: waiting for lock135coro 2: holding the lock136coro 1: waiting for lock137coro 2: releasing the lock138coro 1: holding the lock139coro 1: releasing the lock140```141142Обратите внимание, что и [`async for`](https://python-all.ru/3.5/reference/compound_stmts.html#async-for), и [`async with`](https://python-all.ru/3.5/reference/compound_stmts.html#async-with) можно использовать только внутри корутинной функции, объявленной с [`async def`](https://python-all.ru/3.5/reference/compound_stmts.html#async-def).143144Coroutine functions are intended to be run inside a compatible event loop, such as the [asyncio loop](https://python-all.ru/3.5/library/asyncio-eventloop.html#asyncio-event-loop).145146> **Примечание**147>148> Changed in version 3.5.2: Starting with CPython 3.5.2, `__aiter__` can directly return [asynchronous iterators](https://python-all.ru/3.5/glossary.html#term-asynchronous-iterator). Returning an [awaitable](https://python-all.ru/3.5/glossary.html#term-awaitable) object will result in a [`PendingDeprecationWarning`](https://python-all.ru/3.5/library/exceptions.html#PendingDeprecationWarning).149>150> See more details in the [Asynchronous Iterators](https://python-all.ru/3.5/reference/datamodel.html#async-iterators) documentation section.151152> **См. также**153>154> **[**PEP 492**](https://python-all.ru/3.5/whatsnew/3.5.html) – Coroutines with async and await syntax**155>156> PEP написан и реализован Юрием Селивановым.157158### PEP 465 – Выделенный инфиксный оператор для умножения матриц159160[**PEP 465**](https://python-all.ru/3.5/whatsnew/3.5.html) добавляет инфиксный оператор `@` для умножения матриц. В настоящее время ни один встроенный тип Python не реализует новый оператор, однако его можно реализовать, определив [`__matmul__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__matmul__), [`__rmatmul__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__rmatmul__) и [`__imatmul__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__imatmul__) для обычного, отражённого и матричного умножения с присваиванием. Семантика этих методов аналогична методам, определяющим другие инфиксные арифметические операторы.161162Умножение матриц – особенно распространённая операция во многих областях математики, науки и техники, и добавление `@` позволяет писать более чистый код:163164```python165S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)166```167168вместо:169170```python171S = dot((dot(H, beta) - r).T,172        dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))173```174175NumPy 1.10 поддерживает новый оператор:176177```python178>>> import numpy179180>>> x = numpy.ones(3)181>>> x182array([ 1., 1., 1.])183184>>> m = numpy.eye(3)185>>> m186array([[ 1., 0., 0.],187       [ 0., 1., 0.],188       [ 0., 0., 1.]])189190>>> x @ m191array([ 1., 1., 1.])192```193194> **См. также**195>196> **[**PEP 465**](https://python-all.ru/3.5/whatsnew/3.5.html) – Специализированный инфиксный оператор для матричного умножения**197>198> PEP написан Натаниэлем Дж. Смитом; реализован Бенджамином Петерсоном.199200### PEP 448 – Дополнительные обобщения распаковки201202[**PEP 448**](https://python-all.ru/3.5/whatsnew/3.5.html) расширяет допустимые способы применения `*` оператора распаковки итерируемых объектов и `**` оператора распаковки словарей. Теперь можно использовать произвольное количество распаковок в [вызовах функций](https://python-all.ru/3.5/reference/expressions.html#calls):203204```python205>>> print(*[1], *[2], 3, *[4, 5])2061 2 3 4 5207208>>> def fn(a, b, c, d):209...     print(a, b, c, d)210...211212>>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})2131 2 3 4214```215216Аналогично, литералы кортежей, списков, множеств и словарей допускают множественную распаковку (см. [Списки выражений](https://python-all.ru/3.5/reference/expressions.html#exprlists) и [Литералы словарей](https://python-all.ru/3.5/reference/expressions.html#dict)):217218```python219>>> *range(4), 4220(0, 1, 2, 3, 4)221222>>> [*range(4), 4]223[0, 1, 2, 3, 4]224225>>> {*range(4), 4, *(5, 6, 7)}226{0, 1, 2, 3, 4, 5, 6, 7}227228>>> {'x': 1, **{'y': 2}}229{'x': 1, 'y': 2}230```231232> **См. также**233>234> **[**PEP 448**](https://python-all.ru/3.5/whatsnew/3.5.html) – Дополнительные обобщения распаковки**235>236> PEP написан Джошуа Ландау; реализован Нилом Гирдхаром, Томасом Воутерсом и Джошуа Ландау.237238### PEP 461 – поддержка процентного форматирования для bytes и bytearray239240[**PEP 461**](https://python-all.ru/3.5/whatsnew/3.5.html) добавляет поддержку `%` [оператора интерполяции](https://python-all.ru/3.5/library/stdtypes.html#bytes-formatting) для [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes) и [`bytearray`](https://python-all.ru/3.5/library/functions.html#bytearray).241242Хотя интерполяция обычно считается строковой операцией, существуют случаи, когда интерполяция для `bytes` или `bytearrays` имеет смысл, и работа, необходимая для восполнения отсутствующей функциональности, снижает общую читаемость кода. Эта проблема особенно актуальна при работе с протоколами формата передачи данных, которые часто представляют собой смесь двоичных и ASCII-совместимых текстов.243244Примеры:245246```python247>>> b'Hello %b!' % b'World'248b'Hello World!'249250>>> b'x=%i y=%f' % (1, 2.5)251b'x=1 y=2.500000'252```253254Unicode не допускается для `%b`, но принимается `%a` (эквивалент `repr(obj).encode('ascii', 'backslashreplace')`):255256```python257>>> b'Hello %b!' % 'World'258Traceback (most recent call last):259  File "<stdin>", line 1, in <module>260TypeError: %b requires bytes, or an object that implements __bytes__, not 'str'261262>>> b'price: %a' % '10€'263b"price: '10\\u20ac'"264```265266Обратите внимание, что типы преобразования `%s` и `%r`, хотя и поддерживаются, должны использоваться только в кодовых базах, которым требуется совместимость с Python 2.267268> **См. также**269>270> **[**PEP 461**](https://python-all.ru/3.5/whatsnew/3.5.html) – Добавление % форматирования для bytes и bytearray**271>272> PEP написан Итаном Фурманом; реализован Нилом Шеменауэром и Итаном Фурманом.273274### PEP 484 – Подсказки типов275276Синтаксис аннотаций функций является возможностью Python начиная с версии 3.0 ([**PEP 3107**](https://python-all.ru/3.5/whatsnew/3.5.html)), однако семантика аннотаций оставалась неопределённой.277278Опыт показал, что большинство случаев использования аннотаций функций сводилось к предоставлению подсказок типов для параметров функций и возвращаемых значений. Стало очевидно, что для пользователей Python было бы полезно, если бы стандартная библиотека включала базовые определения и инструменты для аннотаций типов.279280[**PEP 484**](https://python-all.ru/3.5/whatsnew/3.5.html) вводит [временный модуль](https://python-all.ru/3.5/glossary.html#term-provisional-api) для предоставления этих стандартных определений и инструментов, а также некоторые соглашения для ситуаций, когда аннотации недоступны.281282Например, вот простая функция, тип аргумента и возвращаемое значение которой объявлены в аннотациях:283284```python285def greeting(name: str) -> str:286    return 'Hello ' + name287```288289Хотя эти аннотации доступны во время выполнения через обычный атрибут `__annotations__`, *автоматическая проверка типов во время выполнения не производится*. Вместо этого предполагается, что для анализа исходного кода по запросу будет использоваться отдельный внешний статический анализатор (например, [mypy](https://python-all.ru/3.5/whatsnew/3.5.html)).290291Система типов поддерживает объединения, обобщённые типы и специальный тип с именем [`Any`](https://python-all.ru/3.5/library/typing.html#typing.Any), который совместим (т.е. может быть присвоен любому типу и любой тип может быть присвоен ему) со всеми типами.292293> **См. также**294>295> - [`typing`](https://python-all.ru/3.5/library/typing.html#module-typing) документация модуля296> - **[**PEP 484**](https://python-all.ru/3.5/whatsnew/3.5.html) – Подсказки типов**297>298>   PEP написан Гвидо ван Россумом, Юккой Лехтосало и Лукашем Лангой; реализован Гвидо ван Россумом.299> - **[**PEP 483**](https://python-all.ru/3.5/whatsnew/3.5.html) – Теория подсказок типов**300>301>   PEP написан Гвидо ван Россумом302303### PEP 471 – функция os.scandir() – лучший и более быстрый итератор каталогов304305[**PEP 471**](https://python-all.ru/3.5/whatsnew/3.5.html) добавляет новую функцию итерации по каталогам, [`os.scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir), в стандартную библиотеку. Кроме того, [`os.walk()`](https://python-all.ru/3.5/library/os.html#os.walk) теперь реализована с помощью `scandir`, что делает её в 3-5 раз быстрее в системах POSIX и в 7-20 раз быстрее в системах Windows. Это достигается в основном за счёт значительного сокращения количества вызовов [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat), необходимых для обхода дерева каталогов.306307Кроме того, `scandir` возвращает итератор, а не список имён файлов, что повышает эффективность использования памяти при итерации по очень большим каталогам.308309Следующий пример показывает простое использование [`os.scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) для отображения всех файлов (за исключением каталогов) в заданном *пути*, которые не начинаются с `'.'`. Вызов [`entry.is_file()`](https://python-all.ru/3.5/library/os.html#os.DirEntry.is_file) обычно не выполняет дополнительного системного вызова:310311```python312for entry in os.scandir(path):313    if not entry.name.startswith('.') and entry.is_file():314        print(entry.name)315```316317> **См. также**318>319> **[**PEP 471**](https://python-all.ru/3.5/whatsnew/3.5.html) – функция os.scandir() – более качественный и быстрый итератор каталогов**320>321> PEP написан и реализован Беном Хойтом (Ben Hoyt) при содействии Виктора Стиннера (Victor Stinner).322323### PEP 475: Повтор системных вызовов, завершающихся с EINTR324325Код ошибки [`errno.EINTR`](https://python-all.ru/3.5/library/errno.html#errno.EINTR) возвращается всякий раз, когда системный вызов, ожидающий ввода-вывода, прерывается сигналом. Ранее в таких случаях Python возбуждал [`InterruptedError`](https://python-all.ru/3.5/library/exceptions.html#InterruptedError). Это означало, что при написании приложения на Python у разработчика было два варианта:3263271. Игнорировать `InterruptedError`.3282. Обрабатывать `InterruptedError` и пытаться перезапустить прерванный системный вызов в каждом месте вызова.329330Первый вариант приводит к перемежающимся сбоям приложения. Второй вариант добавляет большое количество шаблонного кода, делающего код почти нечитаемым. Сравните:331332```python333print("Hello World")334```335336и:337338```python339while True:340    try:341        print("Hello World")342        break343    except InterruptedError:344        continue345```346347[**PEP 475**](https://python-all.ru/3.5/whatsnew/3.5.html) реализует автоматический повтор системных вызовов при `EINTR`. Это снимает необходимость обработки `EINTR` или [`InterruptedError`](https://python-all.ru/3.5/library/exceptions.html#InterruptedError) в пользовательском коде в большинстве ситуаций и делает программы Python, включая стандартную библиотеку, более надёжными. Обратите внимание, что системный вызов повторяется, только если обработчик сигнала не возбуждает исключение.348349Ниже приведён список функций, которые теперь повторяются при прерывании сигналом:350351- [`open()`](https://python-all.ru/3.5/library/functions.html#open) и [`io.open()`](https://python-all.ru/3.5/library/io.html#io.open);352- функции модуля [`faulthandler`](https://python-all.ru/3.5/library/faulthandler.html#module-faulthandler);353- функции [`os`](https://python-all.ru/3.5/library/os.html#module-os): [`fchdir()`](https://python-all.ru/3.5/library/os.html#os.fchdir), [`fchmod()`](https://python-all.ru/3.5/library/os.html#os.fchmod), [`fchown()`](https://python-all.ru/3.5/library/os.html#os.fchown), [`fdatasync()`](https://python-all.ru/3.5/library/os.html#os.fdatasync), [`fstat()`](https://python-all.ru/3.5/library/os.html#os.fstat), [`fstatvfs()`](https://python-all.ru/3.5/library/os.html#os.fstatvfs), [`fsync()`](https://python-all.ru/3.5/library/os.html#os.fsync), [`ftruncate()`](https://python-all.ru/3.5/library/os.html#os.ftruncate), [`mkfifo()`](https://python-all.ru/3.5/library/os.html#os.mkfifo), [`mknod()`](https://python-all.ru/3.5/library/os.html#os.mknod), [`open()`](https://python-all.ru/3.5/library/os.html#os.open), [`posix_fadvise()`](https://python-all.ru/3.5/library/os.html#os.posix_fadvise), [`posix_fallocate()`](https://python-all.ru/3.5/library/os.html#os.posix_fallocate), [`pread()`](https://python-all.ru/3.5/library/os.html#os.pread), [`pwrite()`](https://python-all.ru/3.5/library/os.html#os.pwrite), [`read()`](https://python-all.ru/3.5/library/os.html#os.read), [`readv()`](https://python-all.ru/3.5/library/os.html#os.readv), [`sendfile()`](https://python-all.ru/3.5/library/os.html#os.sendfile), [`wait3()`](https://python-all.ru/3.5/library/os.html#os.wait3), [`wait4()`](https://python-all.ru/3.5/library/os.html#os.wait4), [`wait()`](https://python-all.ru/3.5/library/os.html#os.wait), [`waitid()`](https://python-all.ru/3.5/library/os.html#os.waitid), [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid), [`write()`](https://python-all.ru/3.5/library/os.html#os.write), [`writev()`](https://python-all.ru/3.5/library/os.html#os.writev);354- особые случаи: [`os.close()`](https://python-all.ru/3.5/library/os.html#os.close) и [`os.dup2()`](https://python-all.ru/3.5/library/os.html#os.dup2) теперь игнорируют ошибки [`EINTR`](https://python-all.ru/3.5/library/errno.html#errno.EINTR); системный вызов не повторяется (за обоснованием обратитесь к PEP);355- функции [`select`](https://python-all.ru/3.5/library/select.html#module-select): [`devpoll.poll()`](https://python-all.ru/3.5/library/select.html#select.devpoll.poll), [`epoll.poll()`](https://python-all.ru/3.5/library/select.html#select.epoll.poll), [`kqueue.control()`](https://python-all.ru/3.5/library/select.html#select.kqueue.control), [`poll.poll()`](https://python-all.ru/3.5/library/select.html#select.poll.poll), [`select()`](https://python-all.ru/3.5/library/select.html#select.select);356- методы класса [`socket`](https://python-all.ru/3.5/library/socket.html#socket.socket): [`accept()`](https://python-all.ru/3.5/library/socket.html#socket.socket.accept), [`connect()`](https://python-all.ru/3.5/library/socket.html#socket.socket.connect) (кроме неблокирующих сокетов), [`recv()`](https://python-all.ru/3.5/library/socket.html#socket.socket.recv), [`recvfrom()`](https://python-all.ru/3.5/library/socket.html#socket.socket.recvfrom), [`recvmsg()`](https://python-all.ru/3.5/library/socket.html#socket.socket.recvmsg), [`send()`](https://python-all.ru/3.5/library/socket.html#socket.socket.send), [`sendall()`](https://python-all.ru/3.5/library/socket.html#socket.socket.sendall), [`sendmsg()`](https://python-all.ru/3.5/library/socket.html#socket.socket.sendmsg), [`sendto()`](https://python-all.ru/3.5/library/socket.html#socket.socket.sendto);357- [`signal.sigtimedwait()`](https://python-all.ru/3.5/library/signal.html#signal.sigtimedwait) и [`signal.sigwaitinfo()`](https://python-all.ru/3.5/library/signal.html#signal.sigwaitinfo);358- [`time.sleep()`](https://python-all.ru/3.5/library/time.html#time.sleep).359360> **См. также**361>362> **[**PEP 475**](https://python-all.ru/3.5/whatsnew/3.5.html) – Повтор системных вызовов, завершающихся с EINTR**363>364> PEP и реализация написаны Шарлем-Франсуа Натали (Charles-François Natali) и Виктором Стиннером (Victor Stinner) при содействии Антуана Питру (Antoine Pitrou) (французское звено).365366### PEP 479: Изменение обработки StopIteration внутри генераторов367368Взаимодействие генераторов и [`StopIteration`](https://python-all.ru/3.5/library/exceptions.html#StopIteration) в Python 3.4 и более ранних версиях иногда было неожиданным и могло скрывать трудноуловимые ошибки. Ранее `StopIteration`, случайно возбуждённое внутри генераторной функции, интерпретировалось конструкцией цикла, управляющего генератором, как окончание итерации.369370[**PEP 479**](https://python-all.ru/3.5/whatsnew/3.5.html) изменяет поведение генераторов: когда внутри генератора возбуждается исключение `StopIteration`, оно заменяется на [`RuntimeError`](https://python-all.ru/3.5/library/exceptions.html#RuntimeError) перед выходом из фрейма генератора. Основная цель этого изменения – упростить отладку в ситуации, когда незащищённый вызов [`next()`](https://python-all.ru/3.5/library/functions.html#next) возбуждает `StopIteration` и приводит к молчаливому завершению итерации, управляемой генератором. Это особенно опасно в сочетании с конструкцией `yield from`.371372Это обратно несовместимое изменение, поэтому для включения нового поведения необходим импорт [\_\_future\_\_](https://python-all.ru/3.5/glossary.html#term-future):373374```python375>>> from __future__ import generator_stop376377>>> def gen():378...     next(iter([]))379...     yield380...381>>> next(gen())382Traceback (most recent call last):383  File "<stdin>", line 2, in gen384StopIteration385386The above exception was the direct cause of the following exception:387388Traceback (most recent call last):389  File "<stdin>", line 1, in <module>390RuntimeError: generator raised StopIteration391```392393Без импорта `__future__` будет возбуждаться [`PendingDeprecationWarning`](https://python-all.ru/3.5/library/exceptions.html#PendingDeprecationWarning) всякий раз, когда внутри генератора возбуждается исключение `StopIteration`.394395> **См. также**396>397> **[**PEP 479**](https://python-all.ru/3.5/whatsnew/3.5.html) – Изменение обработки StopIteration внутри генераторов**398>399> PEP написан Крисом Анжелико (Chris Angelico) и Гвидо ван Россумом (Guido van Rossum). Реализован Крисом Анжелико, Юрием Селивановым и Ником Когланом (Nick Coghlan).400401### PEP 485: Функция для проверки приблизительного равенства402403[**PEP 485**](https://python-all.ru/3.5/whatsnew/3.5.html) добавляет функции [`math.isclose()`](https://python-all.ru/3.5/library/math.html#math.isclose) и [`cmath.isclose()`](https://python-all.ru/3.5/library/cmath.html#cmath.isclose), которые определяют, являются ли два значения приблизительно равными или «близкими» друг к другу. Решение о том, считаются ли два значения близкими, принимается на основе заданных абсолютного и относительного допусков. Относительный допуск – это максимально допустимая разница между аргументами `isclose`, относительно большего абсолютного значения:404405```python406>>> import math407>>> a = 5.0408>>> b = 4.99998409>>> math.isclose(a, b, rel_tol=1e-5)410True411>>> math.isclose(a, b, rel_tol=1e-6)412False413```414415Также можно сравнивать два значения с использованием абсолютного допуска, который должен быть неотрицательным:416417```python418>>> import math419>>> a = 5.0420>>> b = 4.99998421>>> math.isclose(a, b, abs_tol=0.00003)422True423>>> math.isclose(a, b, abs_tol=0.00001)424False425```426427> **См. также**428>429> **[**PEP 485**](https://python-all.ru/3.5/whatsnew/3.5.html) – Функция для проверки приблизительного равенства**430>431> PEP написан Кристофером Баркером (Christopher Barker); реализован Крисом Баркером (Chris Barker) и Талем Эйнатом (Tal Einat).432433### PEP 486: Обучить средство запуска Python работе с виртуальными окружениями434435[**PEP 486**](https://python-all.ru/3.5/whatsnew/3.5.html) обучает средство запуска Windows (см. [**PEP 397**](https://python-all.ru/3.5/whatsnew/3.5.html)) распознавать активное виртуальное окружение. Когда используется интерпретатор по умолчанию и установлена переменная окружения `VIRTUAL_ENV`, будет использоваться интерпретатор из виртуального окружения.436437> **См. также**438>439> **[**PEP 486**](https://python-all.ru/3.5/whatsnew/3.5.html) – Обучить средство запуска Python работе с виртуальными окружениями**440>441> PEP написан и реализован Полом Муром.442443### PEP 488: Устранение PYO файлов444445[**PEP 488**](https://python-all.ru/3.5/whatsnew/3.5.html) отменяет понятие файлов `.pyo`. Это означает, что файлы `.pyc` теперь представляют как неоптимизированный, так и оптимизированный байткод. Чтобы избежать необходимости постоянно перегенерировать файлы байткода, файлы `.pyc` теперь имеют необязательную метку `opt-` в имени, когда байткод оптимизирован. Побочным эффектом является отсутствие конфликтов имен файлов байткода при запуске под [`-O`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-o) или [`-OO`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-oo). Следовательно, файлы байткода, сгенерированные из [`-O`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-o) и [`-OO`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-oo), теперь могут существовать одновременно. [`importlib.util.cache_from_source()`](https://python-all.ru/3.5/library/importlib.html#importlib.util.cache_from_source) имеет обновлённый API для поддержки этого изменения.446447> **См. также**448>449> **[**PEP 488**](https://python-all.ru/3.5/whatsnew/3.5.html) – Устранение PYO файлов**450>451> PEP написан и реализован Бреттом Кэнноном.452453### PEP 489: Многофазная инициализация модулей расширения454455[**PEP 489**](https://python-all.ru/3.5/whatsnew/3.5.html) обновляет инициализацию модулей расширения, чтобы использовать двухэтапный механизм загрузки модулей, введённый [**PEP 451**](https://python-all.ru/3.5/whatsnew/3.5.html) в Python 3.4.456457Это изменение делает семантику импорта модулей расширения, которые opt-in используют новый механизм, гораздо ближе к семантике модулей исходного кода и байткода Python, включая возможность использовать любой допустимый идентификатор в качестве имени модуля, а не ограничиваться ASCII.458459> **См. также**460>461> **[**PEP 489**](https://python-all.ru/3.5/whatsnew/3.5.html) – Многофазная инициализация модуля расширения**462>463> PEP написан Петром Викториным, Стефаном Бенелем и Ником Когленом; реализован Петром Викториным.464465## Прочие изменения языка466467Некоторые небольшие изменения, внесённые в ядро языка Python:468469- Добавлены обработчики ошибок `"namereplace"`. Обработчики ошибок `"backslashreplace"` теперь работают с декодированием и трансляцией. (Предоставлено Серхием Сторчакой в [bpo-19676](https://python-all.ru/3.5/whatsnew/3.5.html) и [bpo-22286](https://python-all.ru/3.5/whatsnew/3.5.html).)470- Опция [`-b`](https://python-all.ru/3.5/using/cmdline.html#cmdoption-b) теперь влияет на сравнения [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes) с [`int`](https://python-all.ru/3.5/library/functions.html#int). (Предоставлено Серхием Сторчакой в [bpo-23681](https://python-all.ru/3.5/whatsnew/3.5.html).)471- Новые казахские `kz1048` и таджикские `koi8_t` [кодеки](https://python-all.ru/3.5/library/codecs.html#standard-encodings). (Предоставлено Серхием Сторчакой в [bpo-22682](https://python-all.ru/3.5/whatsnew/3.5.html) и [bpo-22681](https://python-all.ru/3.5/whatsnew/3.5.html).)472- Докстринги свойств теперь доступны для записи. Это особенно полезно для докстрингов [`collections.namedtuple()`](https://python-all.ru/3.5/library/collections.html#collections.namedtuple). (Предоставлено Беркером Пексагом в [bpo-24064](https://python-all.ru/3.5/whatsnew/3.5.html).)473- Теперь поддерживаются циклические импорты, включающие относительные импорты. (Предоставлено Бреттом Кэнноном и Антуаном Питру в [bpo-17636](https://python-all.ru/3.5/whatsnew/3.5.html).)474475## Новые модули476477### typing478479Новый [`typing`](https://python-all.ru/3.5/library/typing.html#module-typing) [временный](https://python-all.ru/3.5/glossary.html#term-provisional-api) модуль предоставляет стандартные определения и инструменты для аннотаций типов функций. См. [Type Hints](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-484) для получения дополнительной информации.480481### zipapp482483Новый модуль [`zipapp`](https://python-all.ru/3.5/library/zipapp.html#module-zipapp) (указанный в [**PEP 441**](https://python-all.ru/3.5/whatsnew/3.5.html)) предоставляет API и инструмент командной строки для создания исполняемых Python Zip-приложений, которые были введены в Python 2.6 в [bpo-1739468](https://python-all.ru/3.5/whatsnew/3.5.html), но не были широко известны ни тогда, ни после.484485С новым модулем упаковка приложения сводится к помещению всех файлов, включая файл `__main__.py`, в каталог `myapp` и запуску:486487```console488$ python -m zipapp myapp489$ python myapp.pyz490```491492Реализация модуля предоставлена Полом Муром в [bpo-23491](https://python-all.ru/3.5/whatsnew/3.5.html).493494> **См. также**495>496> [**PEP 441**](https://python-all.ru/3.5/whatsnew/3.5.html) – Улучшение поддержки Python ZIP-приложений497498## Улучшенные модули499500### argparse501502Класс [`ArgumentParser`](https://python-all.ru/3.5/library/argparse.html#argparse.ArgumentParser) теперь позволяет отключать [сокращённое использование](https://python-all.ru/3.5/library/argparse.html#prefix-matching) длинных опций, установив [allow\_abbrev](https://python-all.ru/3.5/library/argparse.html#allow-abbrev) в `False`. (Предоставлено Джонатаном Пофом, Стивеном Бетардом, paul j3 и Даниэлем Эрикссоном в [bpo-14910](https://python-all.ru/3.5/whatsnew/3.5.html).)503504### asyncio505506Поскольку модуль [`asyncio`](https://python-all.ru/3.5/library/asyncio.html#module-asyncio) является [временным](https://python-all.ru/3.5/glossary.html#term-provisional-api), все изменения, введённые в Python 3.5, также были перенесены в Python 3.4.x.507508Заметные изменения в модуле [`asyncio`](https://python-all.ru/3.5/library/asyncio.html#module-asyncio) начиная с Python 3.4.0:509510- Новые API для отладки: методы `loop.set_debug()` и `loop.get_debug()`. (Предоставлено Виктором Стиннером.)511- Proactor-цикл событий теперь поддерживает SSL. (Предоставлено Антуаном Питру и Виктором Стиннером в [bpo-22560](https://python-all.ru/3.5/whatsnew/3.5.html).)512- Новый метод `loop.is_closed()` для проверки, закрыт ли цикл событий. (Предоставлено Виктором Стиннером в [bpo-21326](https://python-all.ru/3.5/whatsnew/3.5.html).)513- Новый `loop.create_task()` для удобного создания и планирования нового [`Task`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.Task) для корутины. Метод `create_task` также используется всеми функциями asyncio, которые оборачивают корутины в задачи, такими как [`asyncio.wait()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.wait), [`asyncio.gather()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.gather) и т.д. (Предоставлено Виктором Стиннером.)514- Новый [`transport.get_write_buffer_limits()`](https://python-all.ru/3.5/library/asyncio-protocol.html#asyncio.WriteTransport.get_write_buffer_limits) метод для запроса *верхнего* и *нижнего* порогов управления потоком. (Предложено Виктором Стиннером.)515- Функция [`async()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.async) устарела в пользу [`ensure_future()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.ensure_future). (Предложено Юрием Селивановым.)516- Новые методы [`loop.set_task_factory()`](https://python-all.ru/3.5/library/asyncio-eventloop.html#asyncio.AbstractEventLoop.set_task_factory) и [`loop.get_task_factory()`](https://python-all.ru/3.5/library/asyncio-eventloop.html#asyncio.AbstractEventLoop.get_task_factory) для настройки фабрики задач, используемой методом `loop.create_task()`. (Предложено Юрием Селивановым.)517- Новые [`Queue.join()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.join) и [`Queue.task_done()`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue.task_done) методы очереди. (Предложено Виктором Стиннером.)518- Класс `JoinableQueue` был удалён в пользу класса [`asyncio.Queue`](https://python-all.ru/3.5/library/asyncio-queue.html#asyncio.Queue). (Предложено Виктором Стиннером.)519520Обновления в версии 3.5.1:521522- Функция [`ensure_future()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.ensure_future) и все функции, которые её используют, такие как `loop.run_until_complete()`, теперь принимают все виды [ожидаемых объектов](https://python-all.ru/3.5/glossary.html#term-awaitable). (Автор: Yury Selivanov.)523- Новая функция [`run_coroutine_threadsafe()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.run_coroutine_threadsafe) для отправки корутин в циклы событий из других потоков. (Автор: Vincent Michel.)524- Новый метод [`Transport.is_closing()`](https://python-all.ru/3.5/library/asyncio-protocol.html#asyncio.BaseTransport.is_closing) для проверки, закрывается ли транспорт или уже закрыт. (Автор: Yury Selivanov.)525- Метод `loop.create_server()` теперь может принимать список хостов. (Автор: Yann Sionneau.)526527Обновления в версии 3.5.2:528529- Новый метод `loop.create_future()` для создания объектов Future. Это позволяет альтернативным реализациям цикла событий, таким как [uvloop](https://python-all.ru/3.5/whatsnew/3.5.html), предоставлять более быструю реализацию [`asyncio.Future`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.Future). (Предложено Юрием Селивановым.)530- Новый метод `loop.get_exception_handler()` для получения текущего обработчика исключений. (Предложено Юрием Селивановым.)531- Новый метод [`StreamReader.readuntil()`](https://python-all.ru/3.5/library/asyncio-stream.html#asyncio.StreamReader.readuntil) для чтения данных из потока до появления последовательности байтов-разделителей. (Автор: Mark Korenberg.)532- Методы `loop.create_connection()` и `loop.create_server()` оптимизированы, чтобы избежать вызова системной функции `getaddrinfo`, если адрес уже разрешён. (Предложено А. Джесси Джирю Дэвисом.)533- `loop.sock_connect(sock, address)` больше не требует разрешения *адреса* перед вызовом. (Предложено А. Джесси Джирю Дэвисом.)534535### bz2536537Метод [`BZ2Decompressor.decompress`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor.decompress) теперь принимает необязательный аргумент *max\_length* для ограничения максимального размера распакованных данных. (Предложено Николаусом Ратом в [bpo-15955](https://python-all.ru/3.5/whatsnew/3.5.html).)538539### cgi540541Класс `FieldStorage` теперь поддерживает [менеджера контекста](https://python-all.ru/3.5/glossary.html#term-context-manager) протокол. (Предложено Беркером Пексагом в [bpo-20289](https://python-all.ru/3.5/whatsnew/3.5.html).)542543### cmath544545Новая функция [`isclose()`](https://python-all.ru/3.5/library/cmath.html#cmath.isclose) предоставляет способ проверки на приблизительное равенство. (Предложено Крисом Баркером и Талем Эйнатом в [bpo-24270](https://python-all.ru/3.5/whatsnew/3.5.html).)546547### code548549Метод [`InteractiveInterpreter.showtraceback()`](https://python-all.ru/3.5/library/code.html#code.InteractiveInterpreter.showtraceback) теперь выводит полную цепочку трассировки, как и интерактивный интерпретатор. (Предложено Клавдиу Попа в [bpo-17442](https://python-all.ru/3.5/whatsnew/3.5.html).)550551### collections552553Класс [`OrderedDict`](https://python-all.ru/3.5/library/collections.html#collections.OrderedDict) теперь реализован на C, что делает его в 4–100 раз быстрее. (Предложено Эриком Сноу в [bpo-16991](https://python-all.ru/3.5/whatsnew/3.5.html).)554555`OrderedDict.items()`, `OrderedDict.keys()`, `OrderedDict.values()` представления теперь поддерживают [`reversed()`](https://python-all.ru/3.5/library/functions.html#reversed) итерацию. (Добавлено Сергеем Сторчакой в [bpo-19505](https://python-all.ru/3.5/whatsnew/3.5.html).)556557Класс [`deque`](https://python-all.ru/3.5/library/collections.html#collections.deque) теперь определяет [`index()`](https://python-all.ru/3.5/library/collections.html#collections.deque.index), [`insert()`](https://python-all.ru/3.5/library/collections.html#collections.deque.insert) и [`copy()`](https://python-all.ru/3.5/library/collections.html#collections.deque.copy), а также поддерживает операторы `+` и `*`. Это позволяет распознавать объекты deque как [`MutableSequence`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.MutableSequence) и улучшает их взаимозаменяемость со списками. (Предложено Рэймондом Хеттингером в [bpo-23704](https://python-all.ru/3.5/whatsnew/3.5.html).)558559Докстринги, созданные [`namedtuple()`](https://python-all.ru/3.5/library/collections.html#collections.namedtuple), теперь можно обновлять:560561```python562Point = namedtuple('Point', ['x', 'y'])563Point.__doc__ += ': Cartesian coodinate'564Point.x.__doc__ = 'abscissa'565Point.y.__doc__ = 'ordinate'566```567568(Предложено Беркером Пексагом в [bpo-24064](https://python-all.ru/3.5/whatsnew/3.5.html).)569570Класс [`UserString`](https://python-all.ru/3.5/library/collections.html#collections.UserString) теперь реализует методы [`__getnewargs__()`](https://python-all.ru/3.5/library/pickle.html#object.__getnewargs__), [`__rmod__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__rmod__), [`casefold()`](https://python-all.ru/3.5/library/stdtypes.html#str.casefold), [`format_map()`](https://python-all.ru/3.5/library/stdtypes.html#str.format_map), [`isprintable()`](https://python-all.ru/3.5/library/stdtypes.html#str.isprintable) и [`maketrans()`](https://python-all.ru/3.5/library/stdtypes.html#str.maketrans), соответствующие методам [`str`](https://python-all.ru/3.5/library/stdtypes.html#str). (Предложено Джо Джевником в [bpo-22189](https://python-all.ru/3.5/whatsnew/3.5.html).)571572### collections.abc573574Метод `Sequence.index()` теперь принимает аргументы *start* и *stop*, чтобы соответствовать аналогичным методам [`tuple`](https://python-all.ru/3.5/library/stdtypes.html#tuple), [`list`](https://python-all.ru/3.5/library/stdtypes.html#list) и т. д. (Автор: Devin Jeanpierre в [bpo-23086](https://python-all.ru/3.5/whatsnew/3.5.html).)575576Новый абстрактный базовый класс [`Generator`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.Generator). (Автор: Stefan Behnel в [bpo-24018](https://python-all.ru/3.5/whatsnew/3.5.html).)577578Новые абстрактные базовые классы [`Awaitable`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.Awaitable), [`Coroutine`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.Coroutine), [`AsyncIterator`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.AsyncIterator) и [`AsyncIterable`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.AsyncIterable). (Автор: Yury Selivanov в [bpo-24184](https://python-all.ru/3.5/whatsnew/3.5.html).)579580Для более ранних версий Python обратный порт новых ABC доступен во внешнем [пакете PyPI](https://python-all.ru/3.5/whatsnew/3.5.html).581582### compileall583584Новая опция [`compileall`](https://python-all.ru/3.5/library/compileall.html#module-compileall), `-j N`, позволяет запускать *N* рабочих процессов одновременно для параллельной компиляции байт-кода. Функция [`compile_dir()`](https://python-all.ru/3.5/library/compileall.html#compileall.compile_dir) имеет соответствующий параметр `workers`. (Автор: Claudiu Popa в [bpo-16104](https://python-all.ru/3.5/whatsnew/3.5.html).)585586Ещё одна новая опция, `-r`, позволяет управлять максимальной глубиной рекурсии для подкаталогов. (Автор: Claudiu Popa в [bpo-19628](https://python-all.ru/3.5/whatsnew/3.5.html).)587588Опцию командной строки `-q` теперь можно указывать несколько раз – в этом случае весь вывод, включая ошибки, будет подавляться. Соответствующий параметр `quiet` в [`compile_dir()`](https://python-all.ru/3.5/library/compileall.html#compileall.compile_dir), [`compile_file()`](https://python-all.ru/3.5/library/compileall.html#compileall.compile_file) и [`compile_path()`](https://python-all.ru/3.5/library/compileall.html#compileall.compile_path) теперь может принимать целочисленное значение, указывающее уровень подавления вывода. (Автор: Thomas Kluyver в [bpo-21338](https://python-all.ru/3.5/whatsnew/3.5.html).)589590### concurrent.futures591592Метод [`Executor.map()`](https://python-all.ru/3.5/library/concurrent.futures.html#concurrent.futures.Executor.map) теперь принимает аргумент *chunksize* для группировки задач с целью повышения производительности при использовании [`ProcessPoolExecutor()`](https://python-all.ru/3.5/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor). (Автор: Dan O’Reilly в [bpo-11271](https://python-all.ru/3.5/whatsnew/3.5.html).)593594Количество рабочих процессов в конструкторе [`ThreadPoolExecutor`](https://python-all.ru/3.5/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) теперь необязательно. Значение по умолчанию – 5 \* количество CPU. (Автор: Claudiu Popa в [bpo-21527](https://python-all.ru/3.5/whatsnew/3.5.html).)595596### configparser597598[`configparser`](https://python-all.ru/3.5/library/configparser.html#module-configparser) теперь предоставляет способ настройки преобразования значений: можно указать словарь конвертеров в конструкторе [`ConfigParser`](https://python-all.ru/3.5/library/configparser.html#configparser.ConfigParser) или определить их как методы в подклассах `ConfigParser`. Конвертеры, определённые в экземпляре парсера, наследуются его прокси-объектами разделов.599600Пример:601602```python603>>> import configparser604>>> conv = {}605>>> conv['list'] = lambda v: [e.strip() for e in v.split() if e.strip()]606>>> cfg = configparser.ConfigParser(converters=conv)607>>> cfg.read_string("""608... [s]609... list = a b c d e f g610... """)611>>> cfg.get('s', 'list')612'a b c d e f g'613>>> cfg.getlist('s', 'list')614['a', 'b', 'c', 'd', 'e', 'f', 'g']615>>> section = cfg['s']616>>> section.getlist('list')617['a', 'b', 'c', 'd', 'e', 'f', 'g']618```619620(Автор: Łukasz Langa в [bpo-18159](https://python-all.ru/3.5/whatsnew/3.5.html).)621622### contextlib623624Новый [`redirect_stderr()`](https://python-all.ru/3.5/library/contextlib.html#contextlib.redirect_stderr) [менеджер контекста](https://python-all.ru/3.5/glossary.html#term-context-manager) (аналогичный [`redirect_stdout()`](https://python-all.ru/3.5/library/contextlib.html#contextlib.redirect_stdout)) упрощает для вспомогательных скриптов работу с негибкими API, которые пишут свой вывод в [`sys.stderr`](https://python-all.ru/3.5/library/sys.html#sys.stderr) и не предоставляют возможности его перенаправить:625626```python627>>> import contextlib, io, logging628>>> f = io.StringIO()629>>> with contextlib.redirect_stderr(f):630...     logging.warning('warning')631...632>>> f.getvalue()633'WARNING:root:warning\n'634```635636(Автор: Berker Peksag в [bpo-22389](https://python-all.ru/3.5/whatsnew/3.5.html).)637638### csv639640Метод [`writerow()`](https://python-all.ru/3.5/library/csv.html#csv.csvwriter.writerow) теперь поддерживает произвольные итерируемые объекты, а не только последовательности. (Автор: Serhiy Storchaka в [bpo-23171](https://python-all.ru/3.5/whatsnew/3.5.html).)641642### curses643644Новая функция [`update_lines_cols()`](https://python-all.ru/3.5/library/curses.html#curses.update_lines_cols) обновляет переменные окружения `LINES` и `COLS`. Это полезно для обнаружения ручного изменения размера экрана. (Внёс Арнон Яари в [bpo-4254](https://python-all.ru/3.5/whatsnew/3.5.html).)645646### dbm647648[`dumb.open`](https://python-all.ru/3.5/library/dbm.html#dbm.dumb.open) всегда создаёт новую базу данных, когда флаг имеет значение `"n"`. (Автор: Claudiu Popa в [bpo-18039](https://python-all.ru/3.5/whatsnew/3.5.html).)649650### difflib651652Кодировку HTML-документов, создаваемых [`HtmlDiff.make_file()`](https://python-all.ru/3.5/library/difflib.html#difflib.HtmlDiff.make_file), теперь можно настроить с помощью нового именованного аргумента *charset*. Кодировка по умолчанию изменилась с `"ISO-8859-1"` на `"utf-8"`. (Автор: Berker Peksag в [bpo-2052](https://python-all.ru/3.5/whatsnew/3.5.html).)653654Функция [`diff_bytes()`](https://python-all.ru/3.5/library/difflib.html#difflib.diff_bytes) теперь может сравнивать списки байтовых строк. Это исправляет регрессию из Python 2. (Авторы: Terry J. Reedy и Greg Ward в [bpo-17445](https://python-all.ru/3.5/whatsnew/3.5.html).)655656### distutils657658Обе команды `build` и `build_ext` теперь принимают опцию `-j` для включения параллельной сборки модулей расширения. (Автор: Antoine Pitrou в [bpo-5309](https://python-all.ru/3.5/whatsnew/3.5.html).)659660Модуль [`distutils`](https://python-all.ru/3.5/library/distutils.html#module-distutils) теперь поддерживает сжатие `xz`, которое можно включить, передав `xztar` в качестве аргумента в `bdist --format`. (Автор: Serhiy Storchaka в [bpo-16314](https://python-all.ru/3.5/whatsnew/3.5.html).)661662### doctest663664Функция [`DocTestSuite()`](https://python-all.ru/3.5/library/doctest.html#doctest.DocTestSuite) возвращает пустой [`unittest.TestSuite`](https://python-all.ru/3.5/library/unittest.html#unittest.TestSuite), если *модуль* не содержит строк документации, вместо того чтобы возбуждать [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError). (Автор: Glenn Jones в [bpo-15916](https://python-all.ru/3.5/whatsnew/3.5.html).)665666### email667668Новая опция политики [`Policy.mangle_from_`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.mangle_from_) управляет, добавляют ли генераторы префикс с символом `">"` к строкам, начинающимся с `"From "`, в телах электронных писем. По умолчанию `True` для [`compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.compat32) и `False` для всех остальных политик. (Автор: Milan Oberkirch в [bpo-20098](https://python-all.ru/3.5/whatsnew/3.5.html).)669670Новый метод [`Message.get_content_disposition()`](https://python-all.ru/3.5/library/email.message.html#email.message.Message.get_content_disposition) предоставляет простой доступ к каноническому значению для заголовка *Content-Disposition*. (Автор: Abhilash Raj в [bpo-21083](https://python-all.ru/3.5/whatsnew/3.5.html).)671672Новую опцию политики [`EmailPolicy.utf8`](https://python-all.ru/3.5/library/email.policy.html#email.policy.EmailPolicy.utf8) можно установить в `True` для кодирования заголовков электронных писем с использованием кодировки UTF-8 вместо кодированных слов. Это позволяет форматировать `Messages` в соответствии с [**RFC 6532**](https://python-all.ru/3.5/whatsnew/3.5.html) и использовать с SMTP-сервером, поддерживающим расширение [**RFC 6531**](https://python-all.ru/3.5/whatsnew/3.5.html) `SMTPUTF8`. (Автор: R. David Murray в [bpo-24211](https://python-all.ru/3.5/whatsnew/3.5.html).)673674Конструктор [`mime.text.MIMEText`](https://python-all.ru/3.5/library/email.mime.html#email.mime.text.MIMEText) теперь принимает экземпляр [`charset.Charset`](https://python-all.ru/3.5/library/email.charset.html#email.charset.Charset). (Авторы: Claude Paroz и Berker Peksag в [bpo-16324](https://python-all.ru/3.5/whatsnew/3.5.html).)675676### enum677678Вызываемый объект [`Enum`](https://python-all.ru/3.5/library/enum.html#enum.Enum) получил новый параметр *start*, задающий начальное количество значений перечисления, если указаны только *names*:679680```python681>>> Animal = enum.Enum('Animal', 'cat dog', start=10)682>>> Animal.cat683<Animal.cat: 10>684>>> Animal.dog685<Animal.dog: 11>686```687688(Автор: Ethan Furman в [bpo-21706](https://python-all.ru/3.5/whatsnew/3.5.html).)689690### faulthandler691692Функции [`enable()`](https://python-all.ru/3.5/library/faulthandler.html#faulthandler.enable), [`register()`](https://python-all.ru/3.5/library/faulthandler.html#faulthandler.register), [`dump_traceback()`](https://python-all.ru/3.5/library/faulthandler.html#faulthandler.dump_traceback) и [`dump_traceback_later()`](https://python-all.ru/3.5/library/faulthandler.html#faulthandler.dump_traceback_later) теперь принимают файловые дескрипторы в дополнение к объектам, похожим на файлы. (Автор: Wei Wu в [bpo-23566](https://python-all.ru/3.5/whatsnew/3.5.html).)693694### functools695696Большая часть механизма [`lru_cache()`](https://python-all.ru/3.5/library/functools.html#functools.lru_cache) теперь реализована на C, что делает его значительно быстрее. (Авторы: Matt Joiner, Alexey Kachayev и Serhiy Storchaka в [bpo-14373](https://python-all.ru/3.5/whatsnew/3.5.html).)697698### glob699700Функции [`iglob()`](https://python-all.ru/3.5/library/glob.html#glob.iglob) и [`glob()`](https://python-all.ru/3.5/library/glob.html#glob.glob) теперь поддерживают рекурсивный поиск в подкаталогах, используя шаблон `"**"`. (Автор: Serhiy Storchaka в [bpo-13968](https://python-all.ru/3.5/whatsnew/3.5.html).)701702### gzip703704Аргумент *mode* конструктора [`GzipFile`](https://python-all.ru/3.5/library/gzip.html#gzip.GzipFile) теперь принимает `"x"` для запроса эксклюзивного создания. (Автор: Tim Heaney в [bpo-19222](https://python-all.ru/3.5/whatsnew/3.5.html).)705706### heapq707708Сравнение элементов в [`merge()`](https://python-all.ru/3.5/library/heapq.html#heapq.merge) теперь можно настраивать, передавая [функцию ключа](https://python-all.ru/3.5/glossary.html#term-key-function) в новом необязательном именованном аргументе *key*, а новый необязательный именованный аргумент *reverse* можно использовать для обращения порядка сравнения элементов:709710```python711>>> import heapq712>>> a = ['9', '777', '55555']713>>> b = ['88', '6666']714>>> list(heapq.merge(a, b, key=len))715['9', '88', '777', '6666', '55555']716>>> list(heapq.merge(reversed(a), reversed(b), key=len, reverse=True))717['55555', '6666', '777', '88', '9']718```719720(Автор: Raymond Hettinger в [bpo-13742](https://python-all.ru/3.5/whatsnew/3.5.html).)721722### http723724Новое перечисление [`HTTPStatus`](https://python-all.ru/3.5/library/http.html#http.HTTPStatus), определяющее набор HTTP-кодов состояния, фраз причины и подробных описаний на английском языке. (Автор: Demian Brecht в [bpo-21793](https://python-all.ru/3.5/whatsnew/3.5.html).)725726### http.client727728[`HTTPConnection.getresponse()`](https://python-all.ru/3.5/library/http.client.html#http.client.HTTPConnection.getresponse) теперь вызывает исключение [`RemoteDisconnected`](https://python-all.ru/3.5/library/http.client.html#http.client.RemoteDisconnected), когда соединение с удаленным сервером неожиданно закрывается. Кроме того, если возникает [`ConnectionError`](https://python-all.ru/3.5/library/exceptions.html#ConnectionError) (подклассом которого является `RemoteDisconnected`), клиентский сокет теперь автоматически закрывается и будет переподключаться при следующем запросе:729730```python731import http.client732conn = http.client.HTTPConnection('www.python.org')733for retries in range(3):734    try:735        conn.request('GET', '/')736        resp = conn.getresponse()737    except http.client.RemoteDisconnected:738        pass739```740741(Автор: Martin Panter в [bpo-3566](https://python-all.ru/3.5/whatsnew/3.5.html).)742743### idlelib и IDLE744745Поскольку idlelib реализует оболочку и редактор IDLE и не предназначен для импорта другими программами, он получает улучшения с каждым релизом. Смотрите `Lib/idlelib/NEWS.txt` для полного списка изменений начиная с 3.4.0, а также изменений, внесенных в будущих версиях 3.5.x. Этот файл также доступен из диалога IDLE Справка ‣ О программе IDLE.746747### imaplib748749Класс [`IMAP4`](https://python-all.ru/3.5/library/imaplib.html#imaplib.IMAP4) теперь поддерживает протокол [менеджера контекста](https://python-all.ru/3.5/glossary.html#term-context-manager). При использовании в операторе [`with`](https://python-all.ru/3.5/reference/compound_stmts.html#with) команда IMAP4 `LOGOUT` будет автоматически вызвана в конце блока. (Авторы: Tarek Ziadé и Serhiy Storchaka в [bpo-4972](https://python-all.ru/3.5/whatsnew/3.5.html).)750751Модуль [`imaplib`](https://python-all.ru/3.5/library/imaplib.html#module-imaplib) теперь поддерживает [**RFC 5161**](https://python-all.ru/3.5/whatsnew/3.5.html) (ENABLE Extension) и [**RFC 6855**](https://python-all.ru/3.5/whatsnew/3.5.html) (UTF-8 Support) через метод [`IMAP4.enable()`](https://python-all.ru/3.5/library/imaplib.html#imaplib.IMAP4.enable). Новый атрибут [`IMAP4.utf8_enabled`](https://python-all.ru/3.5/library/imaplib.html#imaplib.IMAP4.utf8_enabled) отслеживает, включена ли поддержка [**RFC 6855**](https://python-all.ru/3.5/whatsnew/3.5.html). (Авторы: Milan Oberkirch, R. David Murray и Maciej Szulik в [bpo-21800](https://python-all.ru/3.5/whatsnew/3.5.html).)752753Модуль [`imaplib`](https://python-all.ru/3.5/library/imaplib.html#module-imaplib) теперь автоматически кодирует не-ASCII строки имен пользователей и паролей с использованием UTF-8, как рекомендуется в RFC. (Автор: Milan Oberkirch в [bpo-21800](https://python-all.ru/3.5/whatsnew/3.5.html).)754755### imghdr756757Функция [`what()`](https://python-all.ru/3.5/library/imghdr.html#imghdr.what) теперь распознает формат [OpenEXR](https://python-all.ru/3.5/whatsnew/3.5.html) (предложен Martin Vignali и Claudiu Popa в [bpo-20295](https://python-all.ru/3.5/whatsnew/3.5.html)) и формат [WebP](https://python-all.ru/3.5/whatsnew/3.5.html) (предложен Fabrice Aneche и Claudiu Popa в [bpo-20197](https://python-all.ru/3.5/whatsnew/3.5.html)).758759### importlib760761Класс [`util.LazyLoader`](https://python-all.ru/3.5/library/importlib.html#importlib.util.LazyLoader) позволяет отложенную загрузку модулей в приложениях, где время запуска критично. (Предложено Бреттом Кэнноном в [bpo-17621](https://python-all.ru/3.5/whatsnew/3.5.html).)762763Метод [`abc.InspectLoader.source_to_code()`](https://python-all.ru/3.5/library/importlib.html#importlib.abc.InspectLoader.source_to_code) теперь является статическим. Это упрощает инициализацию объекта модуля кодом, скомпилированным из строки, через вызов `exec(code, module.__dict__)`. (Предложено Бреттом Кэнноном в [bpo-21156](https://python-all.ru/3.5/whatsnew/3.5.html).)764765Новая функция [`util.module_from_spec()`](https://python-all.ru/3.5/library/importlib.html#importlib.util.module_from_spec) теперь является предпочтительным способом создания модуля. В отличие от прямого создания экземпляра [`types.ModuleType`](https://python-all.ru/3.5/library/types.html#types.ModuleType), эта функция устанавливает различные атрибуты, управляемые импортом, на основе переданного объекта спецификации. (Предложено Бреттом Кэнноном в [bpo-20383](https://python-all.ru/3.5/whatsnew/3.5.html).)766767### inspect768769Оба класса – [`Signature`](https://python-all.ru/3.5/library/inspect.html#inspect.Signature) и [`Parameter`](https://python-all.ru/3.5/library/inspect.html#inspect.Parameter) – теперь поддерживают сериализацию и хеширование. (Предложено Юрием Селивановым в [bpo-20726](https://python-all.ru/3.5/whatsnew/3.5.html) и [bpo-20334](https://python-all.ru/3.5/whatsnew/3.5.html).)770771Новый метод [`BoundArguments.apply_defaults()`](https://python-all.ru/3.5/library/inspect.html#inspect.BoundArguments.apply_defaults) позволяет задавать значения по умолчанию для отсутствующих аргументов:772773```python774>>> def foo(a, b='ham', *args): pass775>>> ba = inspect.signature(foo).bind('spam')776>>> ba.apply_defaults()777>>> ba.arguments778OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])779```780781(Предложено Юрием Селивановым в [bpo-24190](https://python-all.ru/3.5/whatsnew/3.5.html).)782783Новый метод класса [`Signature.from_callable()`](https://python-all.ru/3.5/library/inspect.html#inspect.Signature.from_callable) упрощает создание подклассов [`Signature`](https://python-all.ru/3.5/library/inspect.html#inspect.Signature). (Предложено Юрием Селивановым и Эриком Сноу в [bpo-17373](https://python-all.ru/3.5/whatsnew/3.5.html).)784785Функция [`signature()`](https://python-all.ru/3.5/library/inspect.html#inspect.signature) теперь принимает необязательный именованный аргумент *follow\_wrapped*, который при установке в `False` отключает автоматическое следование по ссылкам `__wrapped__`. (Предложено Юрием Селивановым в [bpo-20691](https://python-all.ru/3.5/whatsnew/3.5.html).)786787Добавлен набор новых функций для интроспекции [корутинных функций](https://python-all.ru/3.5/glossary.html#term-coroutine-function) и [объектов корутин](https://python-all.ru/3.5/glossary.html#term-coroutine): [`iscoroutine()`](https://python-all.ru/3.5/library/inspect.html#inspect.iscoroutine), [`iscoroutinefunction()`](https://python-all.ru/3.5/library/inspect.html#inspect.iscoroutinefunction), [`isawaitable()`](https://python-all.ru/3.5/library/inspect.html#inspect.isawaitable), [`getcoroutinelocals()`](https://python-all.ru/3.5/library/inspect.html#inspect.getcoroutinelocals) и [`getcoroutinestate()`](https://python-all.ru/3.5/library/inspect.html#inspect.getcoroutinestate). (Предложено Юрием Селивановым в [bpo-24017](https://python-all.ru/3.5/whatsnew/3.5.html) и [bpo-24400](https://python-all.ru/3.5/whatsnew/3.5.html).)788789Функции [`stack()`](https://python-all.ru/3.5/library/inspect.html#inspect.stack), [`trace()`](https://python-all.ru/3.5/library/inspect.html#inspect.trace), [`getouterframes()`](https://python-all.ru/3.5/library/inspect.html#inspect.getouterframes) и [`getinnerframes()`](https://python-all.ru/3.5/library/inspect.html#inspect.getinnerframes) теперь возвращают список именованных кортежей. (Предложено Дэниэлом Шахафом в [bpo-16808](https://python-all.ru/3.5/whatsnew/3.5.html).)790791### io792793Новый метод [`BufferedIOBase.readinto1()`](https://python-all.ru/3.5/library/io.html#io.BufferedIOBase.readinto1), который использует не более одного вызова методов [`RawIOBase.read()`](https://python-all.ru/3.5/library/io.html#io.RawIOBase.read) или [`RawIOBase.readinto()`](https://python-all.ru/3.5/library/io.html#io.RawIOBase.readinto) базового необработанного потока. (Предложено Николаусом Ратом в [bpo-20578](https://python-all.ru/3.5/whatsnew/3.5.html).)794795### ipaddress796797Оба класса – [`IPv4Network`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.IPv6Network) – теперь принимают аргумент-кортеж `(address, netmask)`, что позволяет легко создавать сетевые объекты из существующих адресов:798799```python800>>> import ipaddress801>>> ipaddress.IPv4Network(('127.0.0.0', 8))802IPv4Network('127.0.0.0/8')803>>> ipaddress.IPv4Network(('127.0.0.0', '255.0.0.0'))804IPv4Network('127.0.0.0/8')805```806807(Предложено Питером Муди и Антуаном Питру в [bpo-16531](https://python-all.ru/3.5/whatsnew/3.5.html).)808809Новый атрибут `reverse_pointer` для классов [`IPv4Network`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.IPv6Network) возвращает имя обратной DNS-записи PTR:810811```python812>>> import ipaddress813>>> addr = ipaddress.IPv4Address('127.0.0.1')814>>> addr.reverse_pointer815'1.0.0.127.in-addr.arpa'816>>> addr6 = ipaddress.IPv6Address('::1')817>>> addr6.reverse_pointer818'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'819```820821(Предложено Леоном Вебером в [bpo-20480](https://python-all.ru/3.5/whatsnew/3.5.html).)822823### json824825Интерфейс командной строки [`json.tool`](https://python-all.ru/3.5/library/json.html#module-json.tool) теперь сохраняет порядок ключей в JSON-объектах, переданных на вход. Новая опция `--sort-keys` позволяет сортировать ключи по алфавиту. (Предложено Беркером Пексагом в [bpo-21650](https://python-all.ru/3.5/whatsnew/3.5.html).)826827Декодер JSON теперь вызывает [`JSONDecodeError`](https://python-all.ru/3.5/library/json.html#json.JSONDecodeError) вместо [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError), чтобы предоставить больше контекстной информации об ошибке. (Предложено Серхием Сторчакой в [bpo-19361](https://python-all.ru/3.5/whatsnew/3.5.html).)828829### linecache830831Новую функцию [`lazycache()`](https://python-all.ru/3.5/library/linecache.html#linecache.lazycache) можно использовать для захвата информации о модуле, не основанном на файле, чтобы позже получать его строки через [`getline()`](https://python-all.ru/3.5/library/linecache.html#linecache.getline). Это позволяет избежать операций ввода-вывода до тех пор, пока строка действительно не понадобится, и не требует бесконечного хранения глобальных переменных модуля. (Предложено Робертом Коллинзом в [bpo-17911](https://python-all.ru/3.5/whatsnew/3.5.html).)832833### locale834835Новая функция [`delocalize()`](https://python-all.ru/3.5/library/locale.html#locale.delocalize) позволяет преобразовать строку в нормализованное строковое представление числа с учётом настроек `LC_NUMERIC`:836837```python838>>> import locale839>>> locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')840'de_DE.UTF-8'841>>> locale.delocalize('1.234,56')842'1234.56'843>>> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')844'en_US.UTF-8'845>>> locale.delocalize('1,234.56')846'1234.56'847```848849(Предложено Седриком Криером в [bpo-13918](https://python-all.ru/3.5/whatsnew/3.5.html).)850851### logging852853Все методы логирования ([`Logger`](https://python-all.ru/3.5/library/logging.html#logging.Logger) [`log()`](https://python-all.ru/3.5/library/logging.html#logging.Logger.log), [`exception()`](https://python-all.ru/3.5/library/logging.html#logging.Logger.exception), [`critical()`](https://python-all.ru/3.5/library/logging.html#logging.Logger.critical), [`debug()`](https://python-all.ru/3.5/library/logging.html#logging.Logger.debug) и т.д.) теперь принимают экземпляры исключений в качестве аргумента *exc\_info* в дополнение к логическим значениям и кортежам исключений:854855```python856>>> import logging857>>> try:858...     1/0859... except ZeroDivisionError as ex:860...     logging.error('exception', exc_info=ex)861ERROR:root:exception862```863864(Предложено Юрием Селивановым в [bpo-20537](https://python-all.ru/3.5/whatsnew/3.5.html).)865866Класс [`handlers.HTTPHandler`](https://python-all.ru/3.5/library/logging.handlers.html#logging.handlers.HTTPHandler) теперь принимает необязательный экземпляр [`ssl.SSLContext`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLContext) для настройки параметров SSL, используемых в HTTP-соединении. (Предложено Алексом Гейнором в [bpo-22788](https://python-all.ru/3.5/whatsnew/3.5.html).)867868Класс [`handlers.QueueListener`](https://python-all.ru/3.5/library/logging.handlers.html#logging.handlers.QueueListener) теперь принимает именованный аргумент *respect\_handler\_level*, который при установке в `True` будет передавать сообщения обработчикам с учётом их уровней. (Предложено Винаем Саджипом.)869870### lzma871872Метод [`LZMADecompressor.decompress()`](https://python-all.ru/3.5/library/lzma.html#lzma.LZMADecompressor.decompress) теперь принимает необязательный аргумент *max\_length* для ограничения максимального размера распакованных данных. (Предложено Martin Panter в [bpo-15955](https://python-all.ru/3.5/whatsnew/3.5.html).)873874### math875876В модуль [`math`](https://python-all.ru/3.5/library/math.html#module-math) добавлены две новые константы: [`inf`](https://python-all.ru/3.5/library/math.html#math.inf) и [`nan`](https://python-all.ru/3.5/library/math.html#math.nan). (Предложено Mark Dickinson в [bpo-23185](https://python-all.ru/3.5/whatsnew/3.5.html).)877878Новая функция [`isclose()`](https://python-all.ru/3.5/library/math.html#math.isclose) предоставляет способ проверки приблизительного равенства. (Предложено Chris Barker и Tal Einat в [bpo-24270](https://python-all.ru/3.5/whatsnew/3.5.html).)879880Добавлена новая функция [`gcd()`](https://python-all.ru/3.5/library/math.html#math.gcd). Функция [`fractions.gcd()`](https://python-all.ru/3.5/library/fractions.html#fractions.gcd) теперь устарела. (Предложено Mark Dickinson и Serhiy Storchaka в [bpo-22486](https://python-all.ru/3.5/whatsnew/3.5.html).)881882### multiprocessing883884Объекты [`sharedctypes.synchronized()`](https://python-all.ru/3.5/library/multiprocessing.html#multiprocessing.sharedctypes.synchronized) теперь поддерживают протокол [менеджера контекста](https://python-all.ru/3.5/glossary.html#term-context-manager). (Предложено Charles-François Natali в [bpo-21565](https://python-all.ru/3.5/whatsnew/3.5.html).)885886### operator887888Объекты [`attrgetter()`](https://python-all.ru/3.5/library/operator.html#operator.attrgetter), [`itemgetter()`](https://python-all.ru/3.5/library/operator.html#operator.itemgetter) и [`methodcaller()`](https://python-all.ru/3.5/library/operator.html#operator.methodcaller) теперь поддерживают упаковку (pickling). (Предложено Josh Rosenberg и Serhiy Storchaka в [bpo-22955](https://python-all.ru/3.5/whatsnew/3.5.html).)889890Новые функции [`matmul()`](https://python-all.ru/3.5/library/operator.html#operator.matmul) и [`imatmul()`](https://python-all.ru/3.5/library/operator.html#operator.imatmul) для выполнения матричного умножения. (Предложено Benjamin Peterson в [bpo-21176](https://python-all.ru/3.5/whatsnew/3.5.html).)891892### os893894Добавлена новая функция [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir), возвращающая итератор объектов [`DirEntry`](https://python-all.ru/3.5/library/os.html#os.DirEntry). Если возможно, [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) извлекает атрибуты файлов при сканировании каталога, что устраняет необходимость выполнять последующие системные вызовы для определения типа или атрибутов файла, что может значительно повысить производительность. (Предложено Ben Hoyt с помощью Victor Stinner в [bpo-22524](https://python-all.ru/3.5/whatsnew/3.5.html).)895896В Windows теперь доступен новый атрибут [`stat_result.st_file_attributes`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_file_attributes). Он соответствует элементу `dwFileAttributes` структуры `BY_HANDLE_FILE_INFORMATION`, возвращаемой функцией `GetFileInformationByHandle()`. (Предложено Ben Hoyt в [bpo-21719](https://python-all.ru/3.5/whatsnew/3.5.html).)897898Функция [`urandom()`](https://python-all.ru/3.5/library/os.html#os.urandom) теперь использует системный вызов `getrandom()` в Linux 3.17 или новее и `getentropy()` в OpenBSD 5.6 и новее, что устраняет необходимость использовать `/dev/urandom` и позволяет избежать ошибок из-за возможного исчерпания файловых дескрипторов. (Предложено Victor Stinner в [bpo-22181](https://python-all.ru/3.5/whatsnew/3.5.html).)899900Новые функции [`get_blocking()`](https://python-all.ru/3.5/library/os.html#os.get_blocking) и [`set_blocking()`](https://python-all.ru/3.5/library/os.html#os.set_blocking) позволяют получить и установить блокирующий режим файлового дескриптора ([`O_NONBLOCK`](https://python-all.ru/3.5/library/os.html#os.O_NONBLOCK).) (Предложено Victor Stinner в [bpo-22054](https://python-all.ru/3.5/whatsnew/3.5.html).)901902Функции [`truncate()`](https://python-all.ru/3.5/library/os.html#os.truncate) и [`ftruncate()`](https://python-all.ru/3.5/library/os.html#os.ftruncate) теперь поддерживаются в Windows. (Предложено Steve Dower в [bpo-23668](https://python-all.ru/3.5/whatsnew/3.5.html).)903904Появилась новая функция [`os.path.commonpath()`](https://python-all.ru/3.5/library/os.path.html#os.path.commonpath), возвращающая самый длинный общий подпуть каждого переданного имени пути. В отличие от функции [`os.path.commonprefix()`](https://python-all.ru/3.5/library/os.path.html#os.path.commonprefix), она всегда возвращает корректный путь:905906```python907>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])908'/usr/l'909910>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])911'/usr'912```913914(Предложено Rafik Draoui и Serhiy Storchaka в [bpo-10395](https://python-all.ru/3.5/whatsnew/3.5.html).)915916### pathlib917918Новый метод [`Path.samefile()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.samefile) можно использовать для проверки, указывает ли путь на тот же файл, что и другой путь, который может быть как объектом [`Path`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path), так и строкой:919920```python921>>> import pathlib922>>> p1 = pathlib.Path('/etc/hosts')923>>> p2 = pathlib.Path('/etc/../etc/hosts')924>>> p1.samefile(p2)925True926```927928(Предложено Vajrasky Kok и Antoine Pitrou в [bpo-19775](https://python-all.ru/3.5/whatsnew/3.5.html).)929930Метод [`Path.mkdir()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.mkdir) теперь принимает новый необязательный аргумент *exist\_ok* для соответствия функциональности `mkdir -p` и [`os.makedirs()`](https://python-all.ru/3.5/library/os.html#os.makedirs). (Предложено Berker Peksag в [bpo-21539](https://python-all.ru/3.5/whatsnew/3.5.html).)931932Появился новый метод [`Path.expanduser()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.expanduser) для разворачивания префиксов `~` и `~user`. (Предложено Serhiy Storchaka и Claudiu Popa в [bpo-19776](https://python-all.ru/3.5/whatsnew/3.5.html).)933934Новый классовый метод [`Path.home()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.home) можно использовать для получения экземпляра [`Path`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path), представляющего домашний каталог пользователя. (Предложено Victor Salgado и Mayank Tripathi в [bpo-19777](https://python-all.ru/3.5/whatsnew/3.5.html).)935936Новые методы [`Path.write_text()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.write_text), [`Path.read_text()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.read_text), [`Path.write_bytes()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.write_bytes), [`Path.read_bytes()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.read_bytes) для упрощения операций чтения/записи файлов.937938Следующий фрагмент кода создаст или перезапишет существующий файл `~/spam42`:939940```python941>>> import pathlib942>>> p = pathlib.Path('~/spam42')943>>> p.expanduser().write_text('ham')9443945```946947(Предложено Christopher Welborn в [bpo-20218](https://python-all.ru/3.5/whatsnew/3.5.html).)948949### pickle950951Вложенные объекты, такие как несвязанные методы или вложенные классы, теперь могут быть упакованы (pickled) с использованием [протоколов pickle](https://python-all.ru/3.5/library/pickle.html#pickle-protocols) старше версии 4. Версия 4 протокола уже поддерживает эти случаи. (Предложено Serhiy Storchaka в [bpo-23611](https://python-all.ru/3.5/whatsnew/3.5.html).)952953### poplib954955Новая команда [`POP3.utf8()`](https://python-all.ru/3.5/library/poplib.html#poplib.POP3.utf8) включает поддержку [**RFC 6856**](https://python-all.ru/3.5/whatsnew/3.5.html) (Интернационализированная электронная почта), если POP-сервер это поддерживает. (Предложено Milan OberKirch в [bpo-21804](https://python-all.ru/3.5/whatsnew/3.5.html).)956957### re958959В ретроспективных проверках (lookbehind assertions) теперь разрешены ссылки и условные ссылки на группы фиксированной длины:960961```python962>>> import re963>>> pat = re.compile(r'(a|b).(?<=\1)c')964>>> pat.match('aac')965<_sre.SRE_Match object; span=(0, 3), match='aac'>966>>> pat.match('bbc')967<_sre.SRE_Match object; span=(0, 3), match='bbc'>968```969970(Автор: Serhiy Storchaka в [bpo-9179](https://python-all.ru/3.5/whatsnew/3.5.html).)971972Количество групп захвата в регулярных выражениях больше не ограничено 100. (Автор: Serhiy Storchaka в [bpo-22437](https://python-all.ru/3.5/whatsnew/3.5.html).)973974Функции [`sub()`](https://python-all.ru/3.5/library/re.html#re.sub) и [`subn()`](https://python-all.ru/3.5/library/re.html#re.subn) теперь заменяют несовпавшие группы пустыми строками вместо возбуждения исключения. (Автор: Serhiy Storchaka в [bpo-1519638](https://python-all.ru/3.5/whatsnew/3.5.html).)975976Исключения [`re.error`](https://python-all.ru/3.5/library/re.html#re.error) получили новые атрибуты: [`msg`](https://python-all.ru/3.5/library/re.html#re.error.msg), [`pattern`](https://python-all.ru/3.5/library/re.html#re.error.pattern), [`pos`](https://python-all.ru/3.5/library/re.html#re.error.pos), [`lineno`](https://python-all.ru/3.5/library/re.html#re.error.lineno) и [`colno`](https://python-all.ru/3.5/library/re.html#re.error.colno), которые предоставляют более подробную контекстную информацию об ошибке:977978```python979>>> re.compile("""980...     (?x)981...     .++982... """)983Traceback (most recent call last):984   ...985sre_constants.error: multiple repeat at position 16 (line 3, column 7)986```987988(Автор: Serhiy Storchaka в [bpo-22578](https://python-all.ru/3.5/whatsnew/3.5.html).)989990### readline991992Новая функция [`append_history_file()`](https://python-all.ru/3.5/library/readline.html#readline.append_history_file) может использоваться для добавления указанного количества последних элементов истории в заданный файл. (Автор: Bruno Cauet в [bpo-22940](https://python-all.ru/3.5/whatsnew/3.5.html).)993994### selectors995996Новый [`DevpollSelector`](https://python-all.ru/3.5/library/selectors.html#selectors.DevpollSelector) обеспечивает эффективный опрос `/dev/poll` в Solaris. (Автор: Giampaolo Rodola’ в [bpo-18931](https://python-all.ru/3.5/whatsnew/3.5.html).)997998### shutil9991000Функция [`move()`](https://python-all.ru/3.5/library/shutil.html#shutil.move) теперь принимает аргумент *copy\_function*, позволяющий, например, использовать функцию [`copy()`](https://python-all.ru/3.5/library/shutil.html#shutil.copy) вместо стандартной [`copy2()`](https://python-all.ru/3.5/library/shutil.html#shutil.copy2), если необходимо игнорировать метаданные файлов при перемещении. (Автор: Claudiu Popa в [bpo-19840](https://python-all.ru/3.5/whatsnew/3.5.html).)10011002Функция [`make_archive()`](https://python-all.ru/3.5/library/shutil.html#shutil.make_archive) теперь поддерживает формат *xztar*. (Автор: Serhiy Storchaka в [bpo-5411](https://python-all.ru/3.5/whatsnew/3.5.html).)10031004### signal10051006В Windows функция [`set_wakeup_fd()`](https://python-all.ru/3.5/library/signal.html#signal.set_wakeup_fd) теперь также поддерживает дескрипторы сокетов. (Автор: Victor Stinner в [bpo-22018](https://python-all.ru/3.5/whatsnew/3.5.html).)10071008Различные константы `SIG*` в модуле [`signal`](https://python-all.ru/3.5/library/signal.html#module-signal) были преобразованы в [`Enums`](https://python-all.ru/3.5/library/enum.html#module-enum). Это позволяет выводить осмысленные имена при отладке вместо целочисленных «магических чисел». (Автор: Giampaolo Rodola’ в [bpo-21076](https://python-all.ru/3.5/whatsnew/3.5.html).)10091010### smtpd10111012Оба класса [`SMTPServer`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPServer) и [`SMTPChannel`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPChannel) теперь принимают именованный аргумент *decode\_data*, определяющий, будет ли часть `DATA` SMTP-транзакции декодироваться с использованием кодека `"utf-8"` или передаваться методу [`SMTPServer.process_message()`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPServer.process_message) в виде байтовой строки. По умолчанию `True` для обратной совместимости, но в Python 3.6 будет изменено на `False`. Если *decode\_data* установлен в `False`, метод `process_message` должен быть готов принимать именованные аргументы. (Автор: Maciej Szulik в [bpo-19662](https://python-all.ru/3.5/whatsnew/3.5.html).)10131014Класс [`SMTPServer`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPServer) теперь анонсирует расширение `8BITMIME` ([**RFC 6152**](https://python-all.ru/3.5/whatsnew/3.5.html)), если *decode\_data* установлен в `True`. Если клиент указывает `BODY=8BITMIME` в команде `MAIL`, оно передаётся в [`SMTPServer.process_message()`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPServer.process_message) через именованный аргумент *mail\_options*. (Авторы: Milan Oberkirch и R. David Murray в [bpo-21795](https://python-all.ru/3.5/whatsnew/3.5.html).)10151016Класс [`SMTPServer`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPServer) теперь также поддерживает расширение `SMTPUTF8` ([**RFC 6531**](https://python-all.ru/3.5/whatsnew/3.5.html): Internationalized Email). Если клиент указал `SMTPUTF8 BODY=8BITMIME` в команде `MAIL`, они передаются в [`SMTPServer.process_message()`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPServer.process_message) через именованный аргумент *mail\_options*. Метод `process_message` отвечает за корректную обработку данных `SMTPUTF8`. (Автор: Milan Oberkirch в [bpo-21725](https://python-all.ru/3.5/whatsnew/3.5.html).)10171018Теперь можно указывать IPv6-адреса в конструкторе [`SMTPServer`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPServer) напрямую или через разрешение имён, и он будет успешно подключаться. (Автор: Milan Oberkirch в [bpo-14758](https://python-all.ru/3.5/whatsnew/3.5.html).)10191020### smtplib10211022Новый метод [`SMTP.auth()`](https://python-all.ru/3.5/library/smtplib.html#smtplib.SMTP.auth) предоставляет удобный способ реализации пользовательских механизмов аутентификации. (Автор: Milan Oberkirch в [bpo-15014](https://python-all.ru/3.5/whatsnew/3.5.html).)10231024Метод [`SMTP.set_debuglevel()`](https://python-all.ru/3.5/library/smtplib.html#smtplib.SMTP.set_debuglevel) теперь принимает дополнительный уровень отладки (2), который включает временные метки в отладочных сообщениях. (Авторы: Gavin Chappell и Maciej Szulik в [bpo-16914](https://python-all.ru/3.5/whatsnew/3.5.html).)10251026Оба метода [`SMTP.sendmail()`](https://python-all.ru/3.5/library/smtplib.html#smtplib.SMTP.sendmail) и [`SMTP.send_message()`](https://python-all.ru/3.5/library/smtplib.html#smtplib.SMTP.send_message) теперь поддерживают [**RFC 6531**](https://python-all.ru/3.5/whatsnew/3.5.html) (SMTPUTF8). (Авторы: Milan Oberkirch и R. David Murray в [bpo-22027](https://python-all.ru/3.5/whatsnew/3.5.html).)10271028### sndhdr10291030Функции [`what()`](https://python-all.ru/3.5/library/sndhdr.html#sndhdr.what) и [`whathdr()`](https://python-all.ru/3.5/library/sndhdr.html#sndhdr.whathdr) теперь возвращают [`namedtuple()`](https://python-all.ru/3.5/library/collections.html#collections.namedtuple). (Автор: Claudiu Popa в [bpo-18615](https://python-all.ru/3.5/whatsnew/3.5.html).)10311032### socket10331034Функции с тайм-аутами теперь используют монотонные часы вместо системных. (Автор: Victor Stinner в [bpo-22043](https://python-all.ru/3.5/whatsnew/3.5.html).)10351036Новый метод [`socket.sendfile()`](https://python-all.ru/3.5/library/socket.html#socket.socket.sendfile) позволяет отправлять файл через сокет, используя высокопроизводительную функцию [`os.sendfile()`](https://python-all.ru/3.5/library/os.html#os.sendfile) в UNIX, что делает загрузку в 2–3 раза быстрее, чем при использовании обычного [`socket.send()`](https://python-all.ru/3.5/library/socket.html#socket.socket.send). (Автор: Giampaolo Rodola’ в [bpo-17552](https://python-all.ru/3.5/whatsnew/3.5.html).)10371038Метод [`socket.sendall()`](https://python-all.ru/3.5/library/socket.html#socket.socket.sendall) больше не сбрасывает тайм-аут сокета при каждом получении или отправке байтов. Тайм-аут сокета теперь представляет собой максимальную общую продолжительность отправки всех данных. (Автор: Victor Stinner в [bpo-23853](https://python-all.ru/3.5/whatsnew/3.5.html).)10391040Аргумент *backlog* метода [`socket.listen()`](https://python-all.ru/3.5/library/socket.html#socket.socket.listen) теперь необязателен. По умолчанию он устанавливается в [`SOMAXCONN`](https://python-all.ru/3.5/library/socket.html#socket.SOMAXCONN) или `128`, в зависимости от того, что меньше. (Автор: Charles-François Natali в [bpo-21455](https://python-all.ru/3.5/whatsnew/3.5.html).)10411042### ssl10431044#### Поддержка Memory BIO10451046(Предложено Geert Jansen в [bpo-21965](https://python-all.ru/3.5/whatsnew/3.5.html).)10471048Добавлен новый класс [`SSLObject`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLObject) для обеспечения поддержки протокола SSL в тех случаях, когда возможности сетевого ввода-вывода [`SSLSocket`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket) не нужны или неоптимальны. `SSLObject` представляет собой экземпляр протокола SSL, но не реализует методы сетевого ввода-вывода, а вместо этого предоставляет интерфейс с буфером в памяти. Новый класс [`MemoryBIO`](https://python-all.ru/3.5/library/ssl.html#ssl.MemoryBIO) можно использовать для передачи данных между Python и экземпляром протокола SSL.10491050Поддержка SSL через память BIO предназначена в первую очередь для фреймворков, реализующих асинхронный ввод-вывод, для которых модель готовности [`SSLSocket`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket) («select/poll») неэффективна.10511052Новый метод [`SSLContext.wrap_bio()`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLContext.wrap_bio) можно использовать для создания нового экземпляра `SSLObject`.10531054#### Поддержка согласования протокола прикладного уровня10551056(Предложено Benjamin Peterson в [bpo-20188](https://python-all.ru/3.5/whatsnew/3.5.html).)10571058Если OpenSSL поддерживается, модуль [`ssl`](https://python-all.ru/3.5/library/ssl.html#module-ssl) теперь реализует расширение TLS *Согласование протокола прикладного уровня*, как описано в [**RFC 7301**](https://python-all.ru/3.5/whatsnew/3.5.html).10591060Новый [`SSLContext.set_alpn_protocols()`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLContext.set_alpn_protocols) можно использовать для указания того, какие протоколы сокет должен объявлять во время рукопожатия TLS.10611062Новый [`SSLSocket.selected_alpn_protocol()`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket.selected_alpn_protocol) возвращает протокол, выбранный во время рукопожатия TLS. Флаг [`HAS_ALPN`](https://python-all.ru/3.5/library/ssl.html#ssl.HAS_ALPN) указывает, присутствует ли поддержка ALPN.10631064#### Прочие изменения10651066Добавлен новый метод [`SSLSocket.version()`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket.version) для запроса фактической используемой версии протокола. (Предложено Antoine Pitrou в [bpo-20421](https://python-all.ru/3.5/whatsnew/3.5.html).)10671068Класс [`SSLSocket`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket) теперь реализует метод `SSLSocket.sendfile()`. (Предложено Giampaolo Rodola’ в [bpo-17552](https://python-all.ru/3.5/whatsnew/3.5.html).)10691070Метод `SSLSocket.send()` теперь вызывает исключение [`ssl.SSLWantReadError`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLWantReadError) или [`ssl.SSLWantWriteError`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLWantWriteError) для неблокирующего сокета, если операция заблокировалась. Ранее он возвращал `0`. (Предложено Nikolaus Rath в [bpo-20951](https://python-all.ru/3.5/whatsnew/3.5.html).)10711072Функция [`cert_time_to_seconds()`](https://python-all.ru/3.5/library/ssl.html#ssl.cert_time_to_seconds) теперь интерпретирует входное время как UTC, а не как местное время, в соответствии с [**RFC 5280**](https://python-all.ru/3.5/whatsnew/3.5.html). Кроме того, возвращаемое значение всегда является [`int`](https://python-all.ru/3.5/library/functions.html#int). (Автор: Akira Li, [bpo-19940](https://python-all.ru/3.5/whatsnew/3.5.html).)10731074Новые методы `SSLObject.shared_ciphers()` и [`SSLSocket.shared_ciphers()`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket.shared_ciphers) возвращают список шифров, отправленных клиентом во время рукопожатия. (Предложено Benjamin Peterson в [bpo-23186](https://python-all.ru/3.5/whatsnew/3.5.html).)10751076Методы [`SSLSocket.do_handshake()`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket.do_handshake), [`SSLSocket.read()`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket.read), `SSLSocket.shutdown()` и [`SSLSocket.write()`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket.write) класса [`SSLSocket`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLSocket) больше не сбрасывают тайм-аут сокета при каждом получении или отправке байтов. Теперь тайм-аут сокета – это максимальная общая продолжительность работы метода. (Предложено Victor Stinner в [bpo-23853](https://python-all.ru/3.5/whatsnew/3.5.html).)10771078Функция [`match_hostname()`](https://python-all.ru/3.5/library/ssl.html#ssl.match_hostname) теперь поддерживает сопоставление IP-адресов. (Предложено Antoine Pitrou в [bpo-23239](https://python-all.ru/3.5/whatsnew/3.5.html).)10791080### sqlite310811082Класс [`Row`](https://python-all.ru/3.5/library/sqlite3.html#sqlite3.Row) теперь полностью поддерживает протокол последовательности, в частности итерацию [`reversed()`](https://python-all.ru/3.5/library/functions.html#reversed) и индексацию по срезам. (Предложено Claudiu Popa в [bpo-10203](https://python-all.ru/3.5/whatsnew/3.5.html); Lucas Sinclair, Jessica McKellar и Serhiy Storchaka в [bpo-13583](https://python-all.ru/3.5/whatsnew/3.5.html).)10831084### подпроцесс10851086Добавлена новая функция [`run()`](https://python-all.ru/3.5/library/subprocess.html#subprocess.run). Она запускает указанную команду и возвращает объект [`CompletedProcess`](https://python-all.ru/3.5/library/subprocess.html#subprocess.CompletedProcess), описывающий завершённый процесс. Новый API более согласован и является рекомендуемым способом вызова подпроцессов в коде Python, который не требует совместимости с более ранними версиями Python. (Предложено Thomas Kluyver в [bpo-23342](https://python-all.ru/3.5/whatsnew/3.5.html).)10871088Примеры:10891090```python1091>>> subprocess.run(["ls", "-l"])  # не захватывает вывод1092CompletedProcess(args=['ls', '-l'], returncode=0)10931094>>> subprocess.run("exit 1", shell=True, check=True)1095Traceback (most recent call last):1096  ...1097subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 110981099>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)1100CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,1101stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')1102```11031104### sys11051106A new [`set_coroutine_wrapper()`](https://python-all.ru/3.5/library/sys.html#sys.set_coroutine_wrapper) function allows setting a global hook that will be called whenever a [coroutine object](https://python-all.ru/3.5/glossary.html#term-coroutine) is created by an [`async def`](https://python-all.ru/3.5/reference/compound_stmts.html#async-def) function. A corresponding [`get_coroutine_wrapper()`](https://python-all.ru/3.5/library/sys.html#sys.get_coroutine_wrapper) can be used to obtain a currently set wrapper. Both functions are [provisional](https://python-all.ru/3.5/glossary.html#term-provisional-api), and are intended for debugging purposes only. (Contributed by Yury Selivanov in [bpo-24017](https://python-all.ru/3.5/whatsnew/3.5.html).)11071108A new [`is_finalizing()`](https://python-all.ru/3.5/library/sys.html#sys.is_finalizing) function can be used to check if the Python interpreter is [shutting down](https://python-all.ru/3.5/glossary.html#term-interpreter-shutdown). (Contributed by Antoine Pitrou in [bpo-22696](https://python-all.ru/3.5/whatsnew/3.5.html).)11091110### sysconfig11111112Имя каталога сценариев пользователя в Windows теперь включает первые два компонента версии Python. (Предложено Paul Moore в [bpo-23437](https://python-all.ru/3.5/whatsnew/3.5.html).)11131114### tarfile11151116Аргумент *mode* функции [`open()`](https://python-all.ru/3.5/library/tarfile.html#tarfile.open) теперь принимает `"x"` для запроса эксклюзивного создания. (Предложено Berker Peksag в [bpo-21717](https://python-all.ru/3.5/whatsnew/3.5.html).)11171118Методы [`TarFile.extractall()`](https://python-all.ru/3.5/library/tarfile.html#tarfile.TarFile.extractall) и [`TarFile.extract()`](https://python-all.ru/3.5/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.5/whatsnew/3.5.html).)11191120[`TarFile.list()`](https://python-all.ru/3.5/library/tarfile.html#tarfile.TarFile.list) теперь принимает необязательный именованный аргумент *members*, который можно установить на подмножество списка, возвращаемого [`TarFile.getmembers()`](https://python-all.ru/3.5/library/tarfile.html#tarfile.TarFile.getmembers). (Предложено Serhiy Storchaka в [bpo-21549](https://python-all.ru/3.5/whatsnew/3.5.html).)11211122### threading11231124Оба метода [`Lock.acquire()`](https://python-all.ru/3.5/library/threading.html#threading.Lock.acquire) и [`RLock.acquire()`](https://python-all.ru/3.5/library/threading.html#threading.RLock.acquire) теперь используют монотонные часы для управления тайм-аутом. (Предложено Виктором Стиннером в [bpo-22043](https://python-all.ru/3.5/whatsnew/3.5.html).)11251126### time11271128Функция [`monotonic()`](https://python-all.ru/3.5/library/time.html#time.monotonic) теперь всегда доступна. (Предложено Виктором Стиннером в [bpo-22043](https://python-all.ru/3.5/whatsnew/3.5.html).)11291130### timeit11311132Новый параметр командной строки `-u` или `--unit=U` позволяет указать единицу времени для вывода таймера. Поддерживаемые варианты: `usec`, `msec` или `sec`. (Предложено Джулианом Гинди в [bpo-18983](https://python-all.ru/3.5/whatsnew/3.5.html).)11331134Функция [`timeit()`](https://python-all.ru/3.5/library/timeit.html#timeit.timeit) получила новый параметр *globals* для указания пространства имён, в котором будет выполняться код. (Предложено Беном Робертсом в [bpo-2527](https://python-all.ru/3.5/whatsnew/3.5.html).)11351136### tkinter11371138Модуль `tkinter._fix`, использовавшийся для настройки окружения Tcl/Tk в Windows, был заменён на приватную функцию в модуле `_tkinter`, которая не вносит постоянных изменений в переменные окружения. (Предложено Закари Уэром в [bpo-20035](https://python-all.ru/3.5/whatsnew/3.5.html).)11391140### traceback11411142Новые функции [`walk_stack()`](https://python-all.ru/3.5/library/traceback.html#traceback.walk_stack) и [`walk_tb()`](https://python-all.ru/3.5/library/traceback.html#traceback.walk_tb) для удобного обхода объектов frame и traceback. (Автор: Robert Collins, [bpo-17911](https://python-all.ru/3.5/whatsnew/3.5.html).)11431144Новые облегчённые классы: [`TracebackException`](https://python-all.ru/3.5/library/traceback.html#traceback.TracebackException), [`StackSummary`](https://python-all.ru/3.5/library/traceback.html#traceback.StackSummary) и [`FrameSummary`](https://python-all.ru/3.5/library/traceback.html#traceback.FrameSummary). (Предложено Робертом Коллинзом в [bpo-17911](https://python-all.ru/3.5/whatsnew/3.5.html).)11451146Обе функции [`print_tb()`](https://python-all.ru/3.5/library/traceback.html#traceback.print_tb) и [`print_stack()`](https://python-all.ru/3.5/library/traceback.html#traceback.print_stack) теперь поддерживают отрицательные значения для аргумента *limit*. (Предложено Дмитрием Казаковым в [bpo-22619](https://python-all.ru/3.5/whatsnew/3.5.html).)11471148### types11491150Новая функция [`coroutine()`](https://python-all.ru/3.5/library/types.html#types.coroutine) для преобразования [генераторов](https://python-all.ru/3.5/glossary.html#term-generator-iterator) и объектов [`generator-like`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.Generator) в [ожидаемые объекты](https://python-all.ru/3.5/glossary.html#term-awaitable). (Предложено Юрием Селивановым в [bpo-24017](https://python-all.ru/3.5/whatsnew/3.5.html).)11511152Новый тип с именем [`CoroutineType`](https://python-all.ru/3.5/library/types.html#types.CoroutineType), который используется для объектов [корутин](https://python-all.ru/3.5/glossary.html#term-coroutine), создаваемых функциями [`async def`](https://python-all.ru/3.5/reference/compound_stmts.html#async-def). (Предложено Юрием Селивановым в [bpo-24400](https://python-all.ru/3.5/whatsnew/3.5.html).)11531154### unicodedata11551156Модуль [`unicodedata`](https://python-all.ru/3.5/library/unicodedata.html#module-unicodedata) теперь использует данные из [Unicode 8.0.0](https://python-all.ru/3.5/whatsnew/3.5.html).11571158### unittest11591160Метод [`TestLoader.loadTestsFromModule()`](https://python-all.ru/3.5/library/unittest.html#unittest.TestLoader.loadTestsFromModule) теперь принимает ключевой аргумент *pattern*, который передаётся в `load_tests` в качестве третьего аргумента. Найденные пакеты теперь проверяются на наличие `load_tests` независимо от того, совпадает ли их путь с *pattern*, потому что имя пакета не может совпадать с шаблоном по умолчанию. (Предложено Робертом Коллинзом и Барри А. Варшавой в [bpo-16662](https://python-all.ru/3.5/whatsnew/3.5.html).)11611162Ошибки обнаружения тестов теперь доступны в атрибуте [`TestLoader.errors`](https://python-all.ru/3.5/library/unittest.html#unittest.TestLoader.errors) экземпляра [`TestLoader`](https://python-all.ru/3.5/library/unittest.html#unittest.TestLoader). (Предложено Робертом Коллинзом в [bpo-19746](https://python-all.ru/3.5/whatsnew/3.5.html).)11631164Новый параметр командной строки `--locals` для отображения локальных переменных в трассировках. (Предложено Робертом Коллинзом в [bpo-22936](https://python-all.ru/3.5/whatsnew/3.5.html).)11651166### unittest.mock11671168Класс [`Mock`](https://python-all.ru/3.5/library/unittest.mock.html#unittest.mock.Mock) получил следующие улучшения:11691170- Конструктор класса получил новый параметр *unsafe*, который заставляет объекты mock вызывать [`AttributeError`](https://python-all.ru/3.5/library/exceptions.html#AttributeError) для имён атрибутов, начинающихся с `"assert"`. (Предложено Кушалом Дасом в [bpo-21238](https://python-all.ru/3.5/whatsnew/3.5.html).)1171- Новый метод [`Mock.assert_not_called()`](https://python-all.ru/3.5/library/unittest.mock.html#unittest.mock.Mock.assert_not_called) для проверки, был ли вызван объект mock. (Предложено Кушалом Дасом в [bpo-21262](https://python-all.ru/3.5/whatsnew/3.5.html).)11721173Класс [`MagicMock`](https://python-all.ru/3.5/library/unittest.mock.html#unittest.mock.MagicMock) теперь поддерживает операторы [`__truediv__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__truediv__), [`__divmod__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__divmod__) и [`__matmul__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__matmul__). (Вклад: Johannes Baiter в [bpo-20968](https://python-all.ru/3.5/whatsnew/3.5.html), и Håkan Lövdahl в [bpo-23581](https://python-all.ru/3.5/whatsnew/3.5.html) и [bpo-23568](https://python-all.ru/3.5/whatsnew/3.5.html).)11741175Больше нет необходимости явно передавать `create=True` функции [`patch()`](https://python-all.ru/3.5/library/unittest.mock.html#unittest.mock.patch) при подмене встроенных имён. (Предложено Кушалом Дасом в [bpo-17660](https://python-all.ru/3.5/whatsnew/3.5.html).)11761177### urllib11781179Новый класс [`request.HTTPPasswordMgrWithPriorAuth`](https://python-all.ru/3.5/library/urllib.request.html#urllib.request.HTTPPasswordMgrWithPriorAuth) позволяет управлять учётными данными HTTP Basic Authentication, чтобы исключить ненужную обработку ответа `401` или безусловно отправлять учётные данные в первом запросе для взаимодействия с серверами, которые возвращают ответ `404` вместо `401`, если заголовок `Authorization` не отправлен. (Предложено Матеем Цеплом в [bpo-19494](https://python-all.ru/3.5/whatsnew/3.5.html) и Акшитом Кхураной в [bpo-7159](https://python-all.ru/3.5/whatsnew/3.5.html).)11801181Новый аргумент *quote\_via* для функции [`parse.urlencode()`](https://python-all.ru/3.5/library/urllib.parse.html#urllib.parse.urlencode) предоставляет способ управлять кодировкой частей запроса при необходимости. (Предложено Samwyse и Арноном Яари в [bpo-13866](https://python-all.ru/3.5/whatsnew/3.5.html).)11821183Функция [`request.urlopen()`](https://python-all.ru/3.5/library/urllib.request.html#urllib.request.urlopen) принимает объект [`ssl.SSLContext`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLContext) в качестве аргумента *context*, который будет использоваться для HTTPS-соединения. (Предложено Алексом Гейнором в [bpo-22366](https://python-all.ru/3.5/whatsnew/3.5.html).)11841185The [`parse.urljoin()`](https://python-all.ru/3.5/library/urllib.parse.html#urllib.parse.urljoin) was updated to use the [**RFC 3986**](https://python-all.ru/3.5/whatsnew/3.5.html) semantics for the resolution of relative URLs, rather than [**RFC 1808**](https://python-all.ru/3.5/whatsnew/3.5.html) and [**RFC 2396**](https://python-all.ru/3.5/whatsnew/3.5.html). (Contributed by Demian Brecht and Senthil Kumaran in [bpo-22118](https://python-all.ru/3.5/whatsnew/3.5.html).)11861187### wsgiref11881189Аргумент *headers* конструктора класса [`headers.Headers`](https://python-all.ru/3.5/library/wsgiref.html#wsgiref.headers.Headers) теперь необязателен. (Авторы: Pablo Torres Navarrete и SilentGhost в [bpo-5800](https://python-all.ru/3.5/whatsnew/3.5.html).)11901191### xmlrpc11921193Класс [`client.ServerProxy`](https://python-all.ru/3.5/library/xmlrpc.client.html#xmlrpc.client.ServerProxy) теперь поддерживает протокол [контекстного менеджера](https://python-all.ru/3.5/glossary.html#term-context-manager). (Автор: Claudiu Popa в [bpo-20627](https://python-all.ru/3.5/whatsnew/3.5.html).)11941195Конструктор [`client.ServerProxy`](https://python-all.ru/3.5/library/xmlrpc.client.html#xmlrpc.client.ServerProxy) теперь принимает необязательный экземпляр [`ssl.SSLContext`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLContext). (Автор: Alex Gaynor в [bpo-22960](https://python-all.ru/3.5/whatsnew/3.5.html).)11961197### xml.sax11981199SAX-парсеры теперь поддерживают символьный поток объекта [`xmlreader.InputSource`](https://python-all.ru/3.5/library/xml.sax.reader.html#xml.sax.xmlreader.InputSource). (Автор: Serhiy Storchaka в [bpo-2175](https://python-all.ru/3.5/whatsnew/3.5.html).)12001201[`parseString()`](https://python-all.ru/3.5/library/xml.sax.html#xml.sax.parseString) теперь принимает экземпляр [`str`](https://python-all.ru/3.5/library/stdtypes.html#str). (Автор: Serhiy Storchaka в [bpo-10590](https://python-all.ru/3.5/whatsnew/3.5.html).)12021203### zipfile12041205Вывод ZIP теперь можно записывать в непозиционируемые потоки. (Автор: Serhiy Storchaka в [bpo-23252](https://python-all.ru/3.5/whatsnew/3.5.html).)12061207Аргумент *mode* метода [`ZipFile.open()`](https://python-all.ru/3.5/library/zipfile.html#zipfile.ZipFile.open) теперь принимает `"x"` для запроса эксклюзивного создания. (Автор: Serhiy Storchaka в [bpo-21717](https://python-all.ru/3.5/whatsnew/3.5.html).)12081209## Прочие изменения на уровне модулей12101211Многие функции в модулях [`mmap`](https://python-all.ru/3.5/library/mmap.html#module-mmap), [`ossaudiodev`](https://python-all.ru/3.5/library/ossaudiodev.html#module-ossaudiodev), [`socket`](https://python-all.ru/3.5/library/socket.html#module-socket), [`ssl`](https://python-all.ru/3.5/library/ssl.html#module-ssl) и [`codecs`](https://python-all.ru/3.5/library/codecs.html#module-codecs) теперь принимают записываемые [байтоподобные объекты](https://python-all.ru/3.5/glossary.html#term-bytes-like-object). (Автор: Serhiy Storchaka в [bpo-23001](https://python-all.ru/3.5/whatsnew/3.5.html).)12121213## Оптимизации12141215Функция [`os.walk()`](https://python-all.ru/3.5/library/os.html#os.walk) ускорена в 3–5 раз на POSIX-системах и в 7–20 раз на Windows. Это было сделано с помощью новой функции [`os.scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir), которая предоставляет информацию о файлах из системных вызовов `readdir` или `FindFirstFile`/`FindNextFile`. (Автор: Ben Hoyt при содействии Victor Stinner в [bpo-23605](https://python-all.ru/3.5/whatsnew/3.5.html).)12161217Создание `bytes(int)` (заполненного нулевыми байтами) стало быстрее и использует меньше памяти для больших объектов. Для выделения памяти под эти объекты применяется `calloc()` вместо `malloc()`. (Автор: Victor Stinner в [bpo-21233](https://python-all.ru/3.5/whatsnew/3.5.html).)12181219Некоторые операции над [`ipaddress`](https://python-all.ru/3.5/library/ipaddress.html#module-ipaddress), [`IPv4Network`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.IPv6Network) значительно ускорены, например [`subnets()`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.IPv4Network.subnets), [`supernet()`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.IPv4Network.supernet), [`summarize_address_range()`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.summarize_address_range), [`collapse_addresses()`](https://python-all.ru/3.5/library/ipaddress.html#ipaddress.collapse_addresses). Ускорение может составлять от 3 до 15 раз. (Авторы: Antoine Pitrou, Michel Albert и Markus в [bpo-21486](https://python-all.ru/3.5/whatsnew/3.5.html), [bpo-21487](https://python-all.ru/3.5/whatsnew/3.5.html), [bpo-20826](https://python-all.ru/3.5/whatsnew/3.5.html), [bpo-23266](https://python-all.ru/3.5/whatsnew/3.5.html).)12201221Сериализация объектов [`ipaddress`](https://python-all.ru/3.5/library/ipaddress.html#module-ipaddress) оптимизирована для получения значительно меньшего вывода. (Автор: Serhiy Storchaka в [bpo-23133](https://python-all.ru/3.5/whatsnew/3.5.html).)12221223Многие операции над [`io.BytesIO`](https://python-all.ru/3.5/library/io.html#io.BytesIO) теперь выполняются на 50–100% быстрее. (Авторы: Serhiy Storchaka в [bpo-15381](https://python-all.ru/3.5/whatsnew/3.5.html) и David Wilson в [bpo-22003](https://python-all.ru/3.5/whatsnew/3.5.html).)12241225Функция [`marshal.dumps()`](https://python-all.ru/3.5/library/marshal.html#marshal.dumps) теперь работает быстрее: на 65–85% для версий 3 и 4, на 20–25% для версий 0–2 на типичных данных и до 5 раз в лучших случаях. (Автор: Serhiy Storchaka в [bpo-20416](https://python-all.ru/3.5/whatsnew/3.5.html) и [bpo-23344](https://python-all.ru/3.5/whatsnew/3.5.html).)12261227Кодировщик UTF-32 теперь работает в 3–7 раз быстрее. (Автор: Serhiy Storchaka в [bpo-15027](https://python-all.ru/3.5/whatsnew/3.5.html).)12281229Регулярные выражения теперь разбираются до 10% быстрее. (Автор: Serhiy Storchaka в [bpo-19380](https://python-all.ru/3.5/whatsnew/3.5.html).)12301231Функция [`json.dumps()`](https://python-all.ru/3.5/library/json.html#json.dumps) оптимизирована так, что работает с `ensure_ascii=False` так же быстро, как с `ensure_ascii=True`. (Автор: Naoki Inada в [bpo-23206](https://python-all.ru/3.5/whatsnew/3.5.html).)12321233Функции [`PyObject_IsInstance()`](https://python-all.ru/3.5/c-api/object.html#c.PyObject_IsInstance) и [`PyObject_IsSubclass()`](https://python-all.ru/3.5/c-api/object.html#c.PyObject_IsSubclass) ускорены в типичном случае, когда второй аргумент имеет [`type`](https://python-all.ru/3.5/library/functions.html#type) в качестве метакласса. (Автор: Georg Brandl в [bpo-22540](https://python-all.ru/3.5/whatsnew/3.5.html).)12341235Кеширование методов было немного улучшено, что дало до 5% прироста производительности в некоторых тестах. (Автор: Antoine Pitrou в [bpo-22847](https://python-all.ru/3.5/whatsnew/3.5.html).)12361237Объекты из модуля [`random`](https://python-all.ru/3.5/library/random.html#module-random) теперь используют на 50% меньше памяти в 64-битных сборках. (Автор: Serhiy Storchaka в [bpo-23488](https://python-all.ru/3.5/whatsnew/3.5.html).)12381239Вызовы геттера [`property()`](https://python-all.ru/3.5/library/functions.html#property) стали до 25% быстрее. (Автор: Joe Jevnik в [bpo-23910](https://python-all.ru/3.5/whatsnew/3.5.html).)12401241Создание экземпляра [`fractions.Fraction`](https://python-all.ru/3.5/library/fractions.html#fractions.Fraction) теперь до 30% быстрее. (Автор: Stefan Behnel в [bpo-22464](https://python-all.ru/3.5/whatsnew/3.5.html).)12421243Строковые методы [`find()`](https://python-all.ru/3.5/library/stdtypes.html#str.find), [`rfind()`](https://python-all.ru/3.5/library/stdtypes.html#str.rfind), [`split()`](https://python-all.ru/3.5/library/stdtypes.html#str.split), [`partition()`](https://python-all.ru/3.5/library/stdtypes.html#str.partition) и оператор [`in`](https://python-all.ru/3.5/reference/expressions.html#in) теперь значительно быстрее при поиске подстрок из одного символа. (Автор: Serhiy Storchaka в [bpo-23573](https://python-all.ru/3.5/whatsnew/3.5.html).)12441245## Изменения в сборке и C API12461247Добавлены новые функции `calloc`:12481249- [`PyMem_RawCalloc()`](https://python-all.ru/3.5/c-api/memory.html#c.PyMem_RawCalloc),1250- [`PyMem_Calloc()`](https://python-all.ru/3.5/c-api/memory.html#c.PyMem_Calloc),1251- `PyObject_Calloc()`,1252- `_PyObject_GC_Calloc()`.12531254(Автор: Victor Stinner в [bpo-21233](https://python-all.ru/3.5/whatsnew/3.5.html).)12551256Новые вспомогательные функции кодирования/декодирования:12571258- [`Py_DecodeLocale()`](https://python-all.ru/3.5/c-api/sys.html#c.Py_DecodeLocale) (заменён `_Py_char2wchar()`),1259- [`Py_EncodeLocale()`](https://python-all.ru/3.5/c-api/sys.html#c.Py_EncodeLocale) (заменён `_Py_wchar2char()`).12601261(Предложено Victor Stinner в [bpo-18395](https://python-all.ru/3.5/whatsnew/3.5.html).)12621263Новая функция [`PyCodec_NameReplaceErrors()`](https://python-all.ru/3.5/c-api/codec.html#c.PyCodec_NameReplaceErrors) для замены ошибки кодирования unicode на управляющие последовательности `\N{...}`. (Предложено Serhiy Storchaka в [bpo-19676](https://python-all.ru/3.5/whatsnew/3.5.html).)12641265Новая функция [`PyErr_FormatV()`](https://python-all.ru/3.5/c-api/exceptions.html#c.PyErr_FormatV), аналогичная [`PyErr_Format()`](https://python-all.ru/3.5/c-api/exceptions.html#c.PyErr_Format), но принимающая аргумент `va_list`. (Предложено Antoine Pitrou в [bpo-18711](https://python-all.ru/3.5/whatsnew/3.5.html).)12661267Новое исключение `PyExc_RecursionError`. (Предложено Georg Brandl в [bpo-19235](https://python-all.ru/3.5/whatsnew/3.5.html).)12681269Новые функции [`PyModule_FromDefAndSpec()`](https://python-all.ru/3.5/c-api/module.html#c.PyModule_FromDefAndSpec), [`PyModule_FromDefAndSpec2()`](https://python-all.ru/3.5/c-api/module.html#c.PyModule_FromDefAndSpec2) и [`PyModule_ExecDef()`](https://python-all.ru/3.5/c-api/module.html#c.PyModule_ExecDef), введённые [**PEP 489**](https://python-all.ru/3.5/whatsnew/3.5.html) – многофазная инициализация модулей расширения. (Предложено Petr Viktorin в [bpo-24268](https://python-all.ru/3.5/whatsnew/3.5.html).)12701271Новые функции [`PyNumber_MatrixMultiply()`](https://python-all.ru/3.5/c-api/number.html#c.PyNumber_MatrixMultiply) и [`PyNumber_InPlaceMatrixMultiply()`](https://python-all.ru/3.5/c-api/number.html#c.PyNumber_InPlaceMatrixMultiply) для умножения матриц. (Предложено Benjamin Peterson в [bpo-21176](https://python-all.ru/3.5/whatsnew/3.5.html). См. также [**PEP 465**](https://python-all.ru/3.5/whatsnew/3.5.html) для подробностей.)12721273Слот [`PyTypeObject.tp_finalize`](https://python-all.ru/3.5/c-api/typeobj.html#c.PyTypeObject.tp_finalize) теперь является частью стабильного ABI.12741275Сборки для Windows теперь требуют Microsoft Visual C++ 14.0, который доступен в составе [Visual Studio 2015](https://python-all.ru/3.5/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.5/whatsnew/3.5.html) в Python 3.5, они станут полноценными ключевыми словами в Python 3.7.12991300### Устаревшее поведение Python13011302Возбуждение исключения [`StopIteration`](https://python-all.ru/3.5/library/exceptions.html#StopIteration) внутри генератора теперь будет вызывать скрытое [`PendingDeprecationWarning`](https://python-all.ru/3.5/library/exceptions.html#PendingDeprecationWarning), которое станет явным предупреждением об устаревании в Python 3.6 и вызовет [`RuntimeError`](https://python-all.ru/3.5/library/exceptions.html#RuntimeError) в Python 3.7. См. [PEP 479: Change StopIteration handling inside generators](https://python-all.ru/3.5/whatsnew/3.5.html#whatsnew-pep-479) для подробностей.13031304### Неподдерживаемые операционные системы13051306Windows XP больше не поддерживается Microsoft, поэтому в соответствии с [**PEP 11**](https://python-all.ru/3.5/whatsnew/3.5.html) CPython 3.5 официально больше не поддерживается на этой ОС.13071308### Устаревшие модули, функции и методы Python13091310Модуль [`formatter`](https://python-all.ru/3.5/library/formatter.html#module-formatter) теперь полностью устарел и по-прежнему планируется к удалению в Python 3.6.13111312Функция [`asyncio.async()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.async) устарела; вместо неё следует использовать [`ensure_future()`](https://python-all.ru/3.5/library/asyncio-task.html#asyncio.ensure_future).13131314Модуль [`smtpd`](https://python-all.ru/3.5/library/smtpd.html#module-smtpd) в прошлом всегда декодировал часть DATA сообщений электронной почты с помощью кодеков `utf-8`. Теперь это можно контролировать с помощью нового ключевого слова *decode\_data* в функции [`SMTPServer`](https://python-all.ru/3.5/library/smtpd.html#smtpd.SMTPServer). Значение по умолчанию – `True`, но это значение по умолчанию устарело. Укажите ключевое слово *decode\_data* с подходящим значением, чтобы избежать предупреждения об устаревании.13151316Прямое присваивание значений атрибутам [`key`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.key), [`value`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.value) и [`coded_value`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.coded_value) объектов [`http.cookies.Morsel`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel) устарело. Вместо этого используйте метод [`set()`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.set). Кроме того, недокументированный параметр *LegalChars* функции [`set()`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.set) устарел и теперь игнорируется.13171318Передача строки формата в качестве ключевого аргумента *format\_string* методу [`format()`](https://python-all.ru/3.5/library/string.html#string.Formatter.format) класса [`string.Formatter`](https://python-all.ru/3.5/library/string.html#string.Formatter) устарела. (Предложено Сергеем Сторчакой в [bpo-23671](https://python-all.ru/3.5/whatsnew/3.5.html).)13191320Функции [`platform.dist()`](https://python-all.ru/3.5/library/platform.html#platform.dist) и [`platform.linux_distribution()`](https://python-all.ru/3.5/library/platform.html#platform.linux_distribution) теперь устарели. Дистрибутивы Linux используют слишком много разных способов описания себя, поэтому функциональность оставлена на усмотрение пакета. (Предложено Vajrasky Kok и Berker Peksag в [bpo-1322](https://python-all.ru/3.5/whatsnew/3.5.html).)13211322Ранее недокументированные методы `from_function` и `from_builtin` класса [`inspect.Signature`](https://python-all.ru/3.5/library/inspect.html#inspect.Signature) устарели. Вместо них используйте новый метод [`Signature.from_callable()`](https://python-all.ru/3.5/library/inspect.html#inspect.Signature.from_callable). (Предложено Юрием Селивановым в [bpo-24248](https://python-all.ru/3.5/whatsnew/3.5.html).)13231324Функция [`inspect.getargspec()`](https://python-all.ru/3.5/library/inspect.html#inspect.getargspec) устарела и запланирована к удалению в Python 3.6. (Подробнее см. [bpo-20438](https://python-all.ru/3.5/whatsnew/3.5.html).)13251326Функции [`inspect`](https://python-all.ru/3.5/library/inspect.html#module-inspect) [`getfullargspec()`](https://python-all.ru/3.5/library/inspect.html#inspect.getfullargspec), [`getcallargs()`](https://python-all.ru/3.5/library/inspect.html#inspect.getcallargs) и [`formatargspec()`](https://python-all.ru/3.5/library/inspect.html#inspect.formatargspec) устарели; вместо них следует использовать [`inspect.signature()`](https://python-all.ru/3.5/library/inspect.html#inspect.signature) API. (Предложено Юрием Селивановым в [bpo-20438](https://python-all.ru/3.5/whatsnew/3.5.html).)13271328Функции [`getargvalues()`](https://python-all.ru/3.5/library/inspect.html#inspect.getargvalues) и [`formatargvalues()`](https://python-all.ru/3.5/library/inspect.html#inspect.formatargvalues) были случайно помечены как устаревшие в выпуске Python 3.5.0.13291330Использование флага [`re.LOCALE`](https://python-all.ru/3.5/library/re.html#re.LOCALE) с шаблонами str или [`re.ASCII`](https://python-all.ru/3.5/library/re.html#re.ASCII) теперь устарело. (Предложено Сергеем Сторчакой в [bpo-22407](https://python-all.ru/3.5/whatsnew/3.5.html).)13311332Использование нераспознаваемых специальных последовательностей, состоящих из `'\'` и буквы ASCII, в шаблонах регулярных выражений и шаблонах замены теперь вызывает предупреждение об устаревании и будет запрещено в Python 3.6. (Предложено Сергеем Сторчакой в [bpo-23622](https://python-all.ru/3.5/whatsnew/3.5.html).)13331334Недокументированный и неофициальный аргумент по умолчанию *use\_load\_tests* метода [`unittest.TestLoader.loadTestsFromModule()`](https://python-all.ru/3.5/library/unittest.html#unittest.TestLoader.loadTestsFromModule) теперь устарел и игнорируется. (Предложено Robert Collins и Barry A. Warsaw в [bpo-16662](https://python-all.ru/3.5/whatsnew/3.5.html).)13351336## Удалено13371338### Удаление API и функций13391340Следующие устаревшие и ранее объявленные устаревшими API и функции были удалены:13411342- Атрибут `__version__` был удалён из пакета email. Код email уже давно не поставлялся отдельно от стандартной библиотеки, а строка `__version__` не обновлялась в последних нескольких выпусках.1343- Внутренний класс `Netrc` в модуле [`ftplib`](https://python-all.ru/3.5/library/ftplib.html#module-ftplib) был объявлен устаревшим в версии 3.4 и теперь удалён. (Предложено Matt Chaput в [bpo-6623](https://python-all.ru/3.5/whatsnew/3.5.html).)1344- Концепция файлов `.pyo` была удалена.1345- Класс JoinableQueue в экспериментальном модуле [`asyncio`](https://python-all.ru/3.5/library/asyncio.html#module-asyncio) был объявлен устаревшим в версии 3.4.4 и теперь удалён. (Предложено A. Jesse Jiryu Davis в [bpo-23464](https://python-all.ru/3.5/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.5/library/exceptions.html#SyntaxError), так как выражения-генераторы должны быть заключены в круглые скобки, если они не являются единственным аргументом функции.13611362### Изменения в Python API13631364- [**PEP 475**](https://python-all.ru/3.5/whatsnew/3.5.html): Системные вызовы теперь повторяются при прерывании сигналом вместо возбуждения [`InterruptedError`](https://python-all.ru/3.5/library/exceptions.html#InterruptedError), если обработчик сигнала Python не возбуждает исключение.1365- До Python 3.5 объект [`datetime.time`](https://python-all.ru/3.5/library/datetime.html#datetime.time) считался ложным, если он представлял полночь по UTC. Такое поведение считалось неочевидным и подверженным ошибкам и было удалено в Python 3.5. Подробнее см. [bpo-13936](https://python-all.ru/3.5/whatsnew/3.5.html).1366- Метод `ssl.SSLSocket.send()` теперь возбуждает либо [`ssl.SSLWantReadError`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLWantReadError), либо [`ssl.SSLWantWriteError`](https://python-all.ru/3.5/library/ssl.html#ssl.SSLWantWriteError) на неблокирующем сокете, если операция заблокируется. Ранее он возвращал `0`. (Предложено Nikolaus Rath в [bpo-20951](https://python-all.ru/3.5/whatsnew/3.5.html).)1367- Атрибут `__name__` генераторов теперь берётся из имени функции, а не из имени кода. Используйте `gen.gi_code.co_name` для получения имени кода. У генераторов также появился новый атрибут `__qualname__` – уточнённое имя, которое теперь используется для представления генератора (`repr(gen)`). (Предложено Victor Stinner в [bpo-21205](https://python-all.ru/3.5/whatsnew/3.5.html).)1368- Устаревший режим «strict» и аргумент функций [`HTMLParser`](https://python-all.ru/3.5/library/html.parser.html#html.parser.HTMLParser), `HTMLParser.error()` и исключения `HTMLParserError` были удалены. (Предложено Ezio Melotti в [bpo-15114](https://python-all.ru/3.5/whatsnew/3.5.html).) Аргумент *convert\_charrefs* функции [`HTMLParser`](https://python-all.ru/3.5/library/html.parser.html#html.parser.HTMLParser) теперь по умолчанию равен `True`. (Предложено Berker Peksag в [bpo-21047](https://python-all.ru/3.5/whatsnew/3.5.html).)1369- Хотя это формально не является частью API, для целей переноса (например, исправления тестов) стоит отметить, что сообщения об ошибках, которые ранее имели вид «'sometype' не поддерживает буферный протокол», теперь имеют вид «a [байтоподобный объект](https://python-all.ru/3.5/glossary.html#term-bytes-like-object) is required, not 'sometype'». (Предложено Ezio Melotti в [bpo-16518](https://python-all.ru/3.5/whatsnew/3.5.html).)1370- Если текущая директория установлена на директорию, которой больше не существует, то [`FileNotFoundError`](https://python-all.ru/3.5/library/exceptions.html#FileNotFoundError) больше не будет возбуждаться, а [`find_spec()`](https://python-all.ru/3.5/library/importlib.html#importlib.machinery.FileFinder.find_spec) вернёт `None` **без** кэширования `None` в [`sys.path_importer_cache`](https://python-all.ru/3.5/library/sys.html#sys.path_importer_cache), что отличается от типичного случая ([bpo-22834](https://python-all.ru/3.5/whatsnew/3.5.html)).1371- Коды состояния HTTP и сообщения из [`http.client`](https://python-all.ru/3.5/library/http.client.html#module-http.client) и [`http.server`](https://python-all.ru/3.5/library/http.server.html#module-http.server) были реорганизованы в общее перечисление [`HTTPStatus`](https://python-all.ru/3.5/library/http.html#http.HTTPStatus). Значения в [`http.client`](https://python-all.ru/3.5/library/http.client.html#module-http.client) и [`http.server`](https://python-all.ru/3.5/library/http.server.html#module-http.server) остаются доступными для обратной совместимости. (Автор: Demian Brecht, [bpo-21793](https://python-all.ru/3.5/whatsnew/3.5.html).)1372- Если загрузчик импорта определяет `importlib.machinery.Loader.exec_module()`, то ожидается, что он также определяет `create_module()` (сейчас это вызывает [`DeprecationWarning`](https://python-all.ru/3.5/library/exceptions.html#DeprecationWarning), а в Python 3.6 станет ошибкой). Если загрузчик наследует от [`importlib.abc.Loader`](https://python-all.ru/3.5/library/importlib.html#importlib.abc.Loader), то ничего делать не нужно; в противном случае просто определите `create_module()` так, чтобы он возвращал `None`. (Автор: Brett Cannon, [bpo-23014](https://python-all.ru/3.5/whatsnew/3.5.html).)1373- Функция [`re.split()`](https://python-all.ru/3.5/library/re.html#re.split) всегда игнорировала пустые совпадения с шаблоном, поэтому шаблон `"x*"` работал так же, как `"x+"`, а шаблон `"\b"` никогда не работал. Теперь [`re.split()`](https://python-all.ru/3.5/library/re.html#re.split) выдаёт предупреждение, если шаблон может совпадать с пустой строкой. Для совместимости используйте шаблоны, которые никогда не совпадают с пустой строкой (например, `"x+"` вместо `"x*"`). Шаблоны, которые могут совпадать только с пустой строкой (такие как `"\b"`), теперь вызывают ошибку. (Автор: Serhiy Storchaka, [bpo-22818](https://python-all.ru/3.5/whatsnew/3.5.html).)1374- Интерфейс, подобный словарю, для [`http.cookies.Morsel`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel) стал самосогласованным: сравнение morsel теперь учитывает [`key`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.key) и [`value`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.value), [`copy()`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.copy) теперь возвращает экземпляр [`Morsel`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel), а не [`dict`](https://python-all.ru/3.5/library/stdtypes.html#dict), а [`update()`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.update) теперь будет вызывать исключение, если какой-либо из ключей в обновляемом словаре недействителен. Кроме того, недокументированный параметр *LegalChars* функции [`set()`](https://python-all.ru/3.5/library/http.cookies.html#http.cookies.Morsel.set) устарел и теперь игнорируется. (Автор: Demian Brecht, [bpo-2211](https://python-all.ru/3.5/whatsnew/3.5.html).)1375- [**PEP 488**](https://python-all.ru/3.5/whatsnew/3.5.html) убрал файлы `.pyo` из Python и ввёл необязательный тег `opt-` в именах файлов `.pyc`. [`importlib.util.cache_from_source()`](https://python-all.ru/3.5/library/importlib.html#importlib.util.cache_from_source) получил параметр *optimization* для управления тегом `opt-`. Из-за этого параметр *debug\_override* функции теперь устарел. Файлы *.pyo* больше не поддерживаются в качестве аргумента файла для интерпретатора Python и, следовательно, не имеют смысла при самостоятельном распространении (т.е. распространение кода без исходников). Поскольку магическое число для байт-кода изменилось в Python 3.5, все старые файлы *.pyo* из предыдущих версий Python недействительны независимо от этого PEP.1376- Модуль [`socket`](https://python-all.ru/3.5/library/socket.html#module-socket) теперь экспортирует константу [`CAN_RAW_FD_FRAMES`](https://python-all.ru/3.5/library/socket.html#socket.CAN_RAW_FD_FRAMES) в linux 3.6 и выше.1377- Функция [`ssl.cert_time_to_seconds()`](https://python-all.ru/3.5/library/ssl.html#ssl.cert_time_to_seconds) теперь интерпретирует входное время как UTC, а не как местное время, в соответствии с [**RFC 5280**](https://python-all.ru/3.5/whatsnew/3.5.html). Кроме того, возвращаемое значение всегда является [`int`](https://python-all.ru/3.5/library/functions.html#int). (Автор: Akira Li, [bpo-19940](https://python-all.ru/3.5/whatsnew/3.5.html).)1378- Инструмент `pygettext.py` теперь использует стандартный формат +NNNN для часовых поясов в заголовке POT-Creation-Date.1379- Модуль [`smtplib`](https://python-all.ru/3.5/library/smtplib.html#module-smtplib) теперь использует [`sys.stderr`](https://python-all.ru/3.5/library/sys.html#sys.stderr) вместо предыдущей модульной переменной `stderr` для отладочного вывода. Если ваша (тестовая) программа зависит от подмены модульной переменной для захвата отладочного вывода, вам нужно обновить её, чтобы захватывать sys.stderr вместо этого.1380- Методы [`str.startswith()`](https://python-all.ru/3.5/library/stdtypes.html#str.startswith) и [`str.endswith()`](https://python-all.ru/3.5/library/stdtypes.html#str.endswith) больше не возвращают `True` при поиске пустой строки, если индексы полностью выходят за диапазон. (Автор: Serhiy Storchaka, [bpo-24284](https://python-all.ru/3.5/whatsnew/3.5.html).)1381- Функция [`inspect.getdoc()`](https://python-all.ru/3.5/library/inspect.html#inspect.getdoc) теперь возвращает строки документации, унаследованные от базовых классов. Строки документации больше не нужно дублировать, если унаследованная документация подходит. Чтобы подавить унаследованную строку, необходимо указать пустую строку (или документация может быть заполнена). Это изменение влияет на вывод модуля [`pydoc`](https://python-all.ru/3.5/library/pydoc.html#module-pydoc) и функции [`help()`](https://python-all.ru/3.5/library/functions.html#help). (Автор: Serhiy Storchaka, [bpo-15582](https://python-all.ru/3.5/whatsnew/3.5.html).)1382- Вложенные вызовы [`functools.partial()`](https://python-all.ru/3.5/library/functools.html#functools.partial) теперь уплощаются. Если предыдущее поведение использовалось, теперь можно добавить атрибут к объекту [`functools.partial()`](https://python-all.ru/3.5/library/functools.html#functools.partial) или создать подкласс [`functools.partial()`](https://python-all.ru/3.5/library/functools.html#functools.partial). (Автор: Alexander Belopolsky, [bpo-7830](https://python-all.ru/3.5/whatsnew/3.5.html).)13831384### Изменения в C API13851386- Недокументированный член `format` (непубличной) структуры `PyMemoryViewObject` был удалён. Все расширения, полагающиеся на соответствующие части в `memoryobject.h`, должны быть пересобраны.1387- Структура `PyMemAllocator` была переименована в [`PyMemAllocatorEx`](https://python-all.ru/3.5/c-api/memory.html#c.PyMemAllocatorEx), и добавлено новое поле `calloc`.1388- Удалён недокументированный макрос `PyObject_REPR`, который приводил к утечке ссылок. Используйте символ формата `%R` в функциях, подобных [`PyUnicode_FromFormat()`](https://python-all.ru/3.5/c-api/unicode.html#c.PyUnicode_FromFormat), для форматирования [`repr()`](https://python-all.ru/3.5/library/functions.html#repr) объекта. (Автор: Serhiy Storchaka, [bpo-22453](https://python-all.ru/3.5/whatsnew/3.5.html).)1389- Поскольку отсутствие атрибута `__module__` нарушает сериализацию pickle и интроспекцию, для встроенных типов без атрибута `__module__` теперь выдаётся предупреждение об устаревании. В будущем это будет приводить к исключению AttributeError. (Автор: Serhiy Storchaka в [bpo-20204](https://python-all.ru/3.5/whatsnew/3.5.html).)1390- В рамках реализации [**PEP 492**](https://python-all.ru/3.5/whatsnew/3.5.html) слот `tp_reserved` структуры [`PyTypeObject`](https://python-all.ru/3.5/c-api/type.html#c.PyTypeObject) был заменён на слот [`tp_as_async`](https://python-all.ru/3.5/c-api/typeobj.html#c.tp_as_async). См. [Объекты корутин](https://python-all.ru/3.5/c-api/coro.html#coro-objects) для новых типов, структур и функций.1391