Python 3.6

Python 3.6 beta 1 был выпущен 12 сентября 2016 года, а сводку новых возможностей можно найти здесь:

Новые синтаксические возможности

Статус

PEP 498

Форматирование строковых литералов

Завершено

PEP 515

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

Завершено

PEP 525

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

PEP 526

Синтаксис для аннотаций переменных (предварительный)

Завершено

PEP 530

Асинхронные включения (comprehensions)

Новые встроенные возможности

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]

Импорт теперь возбуждает новое исключение 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 для взаимодействия с криптографическим 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.

Для SSLContext были добавлены протоколы TLS, специфичные для сервера и клиента.

Добавлен SSLContext.post_handshake_auth для включения и ssl.SSLSocket.verify_client_post_handshake() для инициации пострукопожатной аутентификации TLS 1.3.

struct

теперь поддерживает числа с плавающей точкой половинной точности IEEE 754 через спецификатор формата „e“.

sys

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

zlib

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

Примечания