Python 3.6

Бета-версія Python 3.6 beta 1 була випущена 12 вересня 2016 року. Огляд нових можливостей можна знайти тут:

Нові синтаксичні можливості

Статус

PEP 498

Форматування рядкових літералів

Реалізовано

PEP 515

Підкреслення в числових літералах

Реалізовано

PEP 525

Асинхронні генератори

PEP 526

Синтаксис анотацій змінних (попередній)

Реалізовано

PEP 530

Асинхронні включення

Нові вбудовані можливості

PEP 468

Збереження порядку kwargs у функції

PEP 487

Спрощена кастомізація створення класів

Частково [1]

PEP 520

Збереження порядку визначення атрибутів класу

Зміни стандартної бібліотеки

PEP 495

Усунення неоднозначності місцевого часу

PEP 506

Додавання модуля secrets до стандартної бібліотеки

PEP 519

Додавання протоколу шляху файлової системи

Внутрішня реалізація CPython

PEP 509

Додавання закритої версії до dict

Не буде реалізовано

PEP 523

Додавання API оцінки кадрів до CPython

Зміни для Linux/Windows

PEP 524

Блокування os.urandom() на Linux (під час запуску системи)

PEP 528

Зміна кодування консолі Windows на UTF-8

PEP 529

Зміна кодування файлової системи Windows на UTF-8

Інші зміни мови:

Інструкція global або nonlocal тепер має текстуально з’являтися до першого використання відповідного імені в тій самій області видимості. Раніше це було лише попередженням SyntaxWarning.

Тепер можна встановити спеціальний метод у None, щоб вказати, що відповідна операція недоступна. Наприклад, якщо клас встановлює __iter__() у None, цей клас не є ітерованим.

Довгі послідовності повторюваних рядків трасування тепер скорочуються до [Previous line repeated {count} more times]

Import тепер генерує нове виключення ModuleNotFoundError, якщо не може знайти модуль. Код, який перевіряє ImportError (у try-except), продовжить працювати.

Методи класів, що покладаються на super() без аргументів, тепер правильно працюватимуть при виклику з методів метакласів під час створення класу.

Зміни у вбудованих модулях:

array

Вичерпані ітератори array.array тепер залишаються вичерпаними, навіть якщо ітерований масив розширюється.

binascii

Функція b2a_base64() тепер приймає необов’язковий іменований аргумент newline для керування тим, чи додається символ нового рядка до значення, що повертається

Реалізовано

cmath

Додано нову константу cmath.tau (τ)

Нові константи: cmath.inf та cmath.nan для відповідності math.inf та math.nan, а також cmath.infj та cmath.nanj для відповідності формату, що використовується в repr комплексних чисел

collections

Додано новий абстрактний базовий клас Collection для представлення скінченних ітерованих контейнерних класів

Новий абстрактний базовий клас Reversible представляє ітеровані класи, які також надають метод __reversed__().

Новий абстрактний базовий клас AsyncGenerator представляє асинхронні генератори.

Функція namedtuple() тепер приймає необов’язковий іменований аргумент module, який, якщо вказано, використовується для атрибута __module__ поверненого класу іменованого кортежу.

Аргументи verbose та rename для namedtuple() тепер є лише іменованими.

Рекурсивні екземпляри collections.deque тепер можна серіалізувати за допомогою pickle.

hashlib

До модуля додано хеш-функції BLAKE2. Функції blake2b() та blake2s() завжди доступні та підтримують повний набір можливостей BLAKE2.

Додано хеш-функції SHA-3: sha3_224(), sha3_256(), sha3_384(), sha3_512(), а також хеш-функції SHAKE: shake_128() та shake_256().

Функція виведення ключа на основі пароля scrypt() тепер доступна з OpenSSL 1.1.0 та новішими версіями.

json

json.load() та json.loads() тепер підтримують двійкове введення. Закодований JSON має бути представлений у форматі UTF-8, UTF-16 або UTF-32.

math

Додано нову константу math.tau (τ)

Реалізовано

os

Новий метод close() дозволяє явно закривати ітератор scandir(). Ітератор scandir() тепер підтримує протокол менеджера контексту.

На Linux os.urandom() тепер блокується до ініціалізації пулу ентропії системи urandom для підвищення безпеки.

Системний виклик Linux getrandom() (отримати випадкові байти) тепер доступний як нова функція os.getrandom().

re

Додано підтримку модифікуючих груп у регулярних виразах. Приклади: „(?i:p)ython“ збігається з „python“ та „Python“, але не з „PYTHON“; „(?i)g(?-i:v)r“ збігається з „GvR“ та „gvr“, але не з „GVR“.

Групи об’єктів Match тепер доступні через __getitem__, що еквівалентно group(). Отже, mo[„name“] тепер еквівалентно mo.group(„name“).

Об’єкти Match тепер підтримують індексоподібні об’єкти як індекси груп.

socket

Функція ioctl() тепер підтримує код керування SIO_LOOPBACK_FAST_PATH.

Константи getsockopt() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC та SO_PASSSEC тепер підтримуються.

Функція setsockopt() тепер підтримує форму setsockopt(level, optname, None, optlen: int).

Модуль socket тепер підтримує сімейство адрес AF_ALG для взаємодії з crypto API ядра Linux. Додано ALG_, SOL_ALG та sendmsg_afalg().

Додано нові константи Linux TCP_USER_TIMEOUT та TCP_CONGESTION.

ssl

ssl підтримує OpenSSL 1.1.0. Мінімальна рекомендована версія — 1.0.2.

3DES видалено зі стандартного набору шифрів, а набори шифрів ChaCha20 Poly1305 додано.

SSLContext має кращу конфігурацію параметрів та шифрів за замовчуванням.

SSL-сесію можна копіювати з одного клієнтського з’єднання в інше за допомогою нового класу SSLSession. Відновлення TLS-сесій може прискорити початкове рукостискання, зменшити затримку та підвищити продуктивність.

Новий метод get_ciphers() дозволяє отримати список увімкнених шифрів у порядку пріоритету.

Усі константи та прапорці перетворено на IntEnum та IntFlags.

Додано серверні та клієнтські специфічні протоколи TLS для SSLContext.

Додано SSLContext.post_handshake_auth для увімкнення та ssl.SSLSocket.verify_client_post_handshake() для ініціації автентифікації після рукостискання TLS 1.3.

struct

тепер підтримує числа з плаваючою точкою IEEE 754 половинної точності через формат-специфікатор „e“.

sys

Нова функція getfilesystemencodeerrors() повертає назву режиму помилок, що використовується для перетворення між іменами файлів Unicode та байтовими іменами файлів.

zlib

Функції compress() та decompress() тепер приймають іменовані аргументи

Примітки