Python 3.5

Ниже приведён список завершённых/принятых PEP для Python 3.5, сгруппированных по их влиянию на MicroPython.

Расширения синтаксиса

Статус

PEP 448

Дополнительные обобщения распаковки

Частично

PEP 465

Новый оператор умножения матриц

Полностью

PEP 492

Сопрограммы с синтаксисом async и await

Полностью

Расширения и изменения среды выполнения

PEP 461

Форматирование через % для двоичных строк

Полностью

PEP 475

Повторение системных вызовов, завершившихся с ошибкой EINTR

Полностью

PEP 479

Изменение обработки StopIteration внутри генераторов

Полностью

Изменения стандартной библиотеки

PEP 471

os.scandir()

PEP 485

math.isclose() — функция для проверки приблизительного равенства

Полностью

Прочие изменения

PEP 441

Улучшенная поддержка zip-приложений Python

PEP 486

Информирование Python Launcher о виртуальных окружениях

Не относится

PEP 484

Аннотации типов (только рекомендательные)

Полностью [1]

PEP 488

Устранение файлов PYO

Не относится

PEP 489

Переработка загрузки модулей расширений

Прочие изменения языка:

Добавлены обработчики ошибок namereplace. Обработчики ошибок backslashreplace теперь работают при декодировании и трансляции.

Строки документации свойств теперь доступны для записи. Это особенно полезно для строк документации collections.namedtuple()

Теперь поддерживается циклический импорт с относительными импортами.

Новые модули:

Изменения во встроенных модулях:

collections

Класс OrderedDict теперь реализован на C, что делает его в 4–100 раз быстрее.

Представления OrderedDict.items(), OrderedDict.keys(), OrderedDict.values() теперь поддерживают итерацию reversed().

The deque class now defines index(), insert(), and copy(), and supports the + and * operators.

Строки документации, создаваемые namedtuple(), теперь можно обновлять.

Класс UserString теперь реализует методы __getnewargs__(), __rmod__(), casefold(), format_map(), isprintable() и maketrans(), соответствующие соответствующим методам str.

heapq

Сравнение элементов в merge() теперь можно настраивать, передавая функцию ключа в новом необязательном именованном аргументе key, а новый необязательный именованный аргумент reverse можно использовать для обращения сравнения элементов

io

Новый метод BufferedIOBase.readinto1(), который использует не более одного вызова методов RawIOBase.read() или RawIOBase.readinto() нижележащего необработанного потока

json

Декодер JSON теперь возбуждает JSONDecodeError вместо ValueError, чтобы предоставить более точную контекстную информацию об ошибке.

math

В модуль math добавлены две новые константы: inf и nan.

Полностью

Новая функция isclose() предоставляет способ проверки приблизительного равенства.

Добавлена новая функция gcd(). Функция fractions.gcd() теперь объявлена устаревшей.

os

Добавлена новая функция scandir(), возвращающая итератор объектов DirEntry.

Функция urandom() теперь использует системный вызов getrandom() в Linux 3.17 или новее и getentropy() в OpenBSD 5.6 и новее, что устраняет необходимость использования /dev/urandom и позволяет избежать сбоев из-за потенциального исчерпания файловых дескрипторов.

Новые функции get_blocking() и set_blocking() позволяют получать и устанавливать блокирующий режим файлового дескриптора (O_NONBLOCK).

Появилась новая функция os.path.commonpath(), возвращающая самый длинный общий подпуть для каждого переданного имени пути

re

Ссылки и условные ссылки на группы фиксированной длины теперь разрешены в утверждениях обратного просмотра

Количество захватывающих групп в регулярных выражениях больше не ограничено 100.

Функции sub() и subn() теперь заменяют несовпавшие группы пустыми строками вместо возбуждения исключения.

Исключения re.error получили новые атрибуты msg, pattern, pos, lineno и colno, которые предоставляют более точную контекстную информацию об ошибке

socket

Функции с тайм-аутами теперь используют монотонные часы вместо системных часов.

Новый метод socket.sendfile() позволяет отправлять файл через сокет, используя высокопроизводительную функцию os.sendfile() в UNIX, в результате чего загрузка происходит в 2–3 раза быстрее, чем при использовании обычного socket.send()

Метод socket.sendall() больше не сбрасывает тайм-аут сокета каждый раз при получении или отправке байтов. Тайм-аут сокета теперь является максимальной общей длительностью отправки всех данных.

Аргумент backlog метода socket.listen() теперь необязателен. По умолчанию он устанавливается в SOMAXCONN или 128, в зависимости от того, что меньше.

Полностью

ssl

Поддержка Memory BIO

Поддержка согласования протокола прикладного уровня (ALPN)

Появился новый метод SSLSocket.version() для запроса фактически используемой версии протокола.

Класс SSLSocket теперь реализует метод SSLSocket.sendfile().

Метод SSLSocket.send() теперь возбуждает исключение ssl.SSLWantReadError или ssl.SSLWantWriteError на неблокирующем сокете, если операция привела бы к блокировке. Ранее он возвращал 0.

Функция cert_time_to_seconds() теперь интерпретирует входное время как UTC, а не как локальное время, согласно RFC 5280. Кроме того, возвращаемое значение всегда является int.

Новые методы SSLObject.shared_ciphers() и SSLSocket.shared_ciphers() возвращают список шифров, отправленных клиентом во время рукопожатия.

Методы SSLSocket.do_handshake(), SSLSocket.read(), SSLSocket.shutdown() и SSLSocket.write() класса SSLSocket больше не сбрасывают тайм-аут сокета каждый раз при получении или отправке байтов.

Функция match_hostname() теперь поддерживает сопоставление IP-адресов.

sys

Новая функция set_coroutine_wrapper() позволяет установить глобальный перехватчик, который будет вызываться всякий раз, когда объект сопрограммы создаётся функцией async def. Соответствующая функция get_coroutine_wrapper() может использоваться для получения текущей установленной обёртки.

Новую функцию is_finalizing() можно использовать для проверки того, завершает ли работу интерпретатор Python.

time

Функция monotonic() теперь всегда доступна

Примечания