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

Посилання та умовні посилання на групи фіксованої довжини тепер дозволені в ретроспективних твердженнях lookbehind.

Кількість груп захоплення у регулярних виразах більше не обмежена 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. Крім того, повертане значення завжди є цілим числом.

Нові методи 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() тепер завжди доступна.

Примітки