Python 3.6¶
Python 3.6 beta 1 был выпущен 12 сентября 2016 года, а сводку новых возможностей можно найти здесь:
Новые синтаксические возможности | Статус | |
Форматирование строковых литералов | Завершено | |
Подчёркивания в числовых литералах | Завершено | |
Асинхронные генераторы | ||
Синтаксис для аннотаций переменных (предварительный) | Завершено | |
Асинхронные включения (comprehensions) | ||
Новые встроенные возможности | ||
Сохранение порядка kwargs в функции | ||
Упрощённая настройка создания класса | Частично [1] | |
Сохранение порядка определения атрибутов класса | ||
Изменения в стандартной библиотеке | ||
Устранение неоднозначности локального времени | ||
Добавление модуля secrets в стандартную библиотеку | ||
Добавление протокола путей файловой системы | ||
Внутреннее устройство CPython | ||
Добавление приватной версии в dict | Не будет реализовано | |
Добавление API вычисления кадров в CPython | ||
Изменения для Linux/Windows | ||
Сделать | ||
Изменение кодировки консоли Windows на UTF-8 | ||
Изменение кодировки файловой системы Windows на UTF-8 | ||
Прочие изменения языка:
Инструкция global или nonlocal теперь должна текстуально появляться до первого использования соответствующего имени в той же области видимости. Ранее это было SyntaxWarning. | |
Теперь можно установить специальный метод в None, чтобы указать, что соответствующая операция недоступна. Например, если класс устанавливает __iter__() в None, класс не является итерируемым. | |
Длинные последовательности повторяющихся строк трассировки теперь сокращаются как [Previous line repeated {count} more times] | |
Импорт теперь возбуждает новое исключение ModuleNotFoundError, когда не может найти модуль. Код, который в настоящее время проверяет ImportError (в try-except), по-прежнему будет работать. | |
Методы класса, опирающиеся на super() без аргументов, теперь будут работать корректно при вызове из методов метакласса во время создания класса. |
Изменения во встроенных модулях:
Исчерпанные итераторы array.array теперь останутся исчерпанными, даже если итерируемый массив будет расширен. | |
Функция b2a_base64() теперь принимает необязательный именованный аргумент newline для управления тем, добавляется ли символ новой строки к возвращаемому значению | Завершено |
Добавлена новая константа cmath.tau (τ) | |
Новые константы: cmath.inf и cmath.nan для соответствия math.inf и math.nan, а также cmath.infj и cmath.nanj для соответствия формату, используемому в repr комплексных чисел | |
Добавлен новый абстрактный базовый класс Collection для представления классов-контейнеров с заданным размером, поддерживающих итерацию | |
Новый абстрактный базовый класс Reversible представляет итерируемые классы, которые также предоставляют метод __reversed__(). | |
Новый абстрактный базовый класс AsyncGenerator представляет асинхронные генераторы. | |
Функция namedtuple() теперь принимает необязательный именованный аргумент module, который, если он задан, используется для атрибута __module__ возвращаемого класса именованного кортежа. | |
Аргументы verbose и rename функции namedtuple() теперь являются только именованными. | |
Рекурсивные экземпляры collections.deque теперь можно сериализовать с помощью pickle. | |
В модуль добавлены хеш-функции 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.load() и json.loads() теперь поддерживают двоичный ввод. Закодированный JSON должен быть представлен с использованием UTF-8, UTF-16 или UTF-32. | |
Добавлена новая константа math.tau (τ) | Завершено |
Новый метод close() позволяет явно закрыть итератор scandir(). Итератор scandir() теперь поддерживает протокол менеджера контекста. | |
В Linux os.urandom() теперь блокируется до тех пор, пока пул энтропии urandom системы не будет инициализирован, для повышения безопасности. | |
Системный вызов Linux getrandom() (получение случайных байтов) теперь доступен через новую функцию os.getrandom(). | |
Добавлена поддержка диапазонов модификаторов в регулярных выражениях. Примеры: „(?i:p)ython“ соответствует „python“ и „Python“, но не „PYTHON“; „(?i)g(?-i:v)r“ соответствует „GvR“ и „gvr“, но не „GVR“. | |
К группам объекта match теперь можно обращаться через __getitem__, что эквивалентно group(). Так, mo[„name“] теперь эквивалентно mo.group(„name“). | |
Объекты match теперь поддерживают объекты, похожие на индексы, в качестве индексов групп. | |
Функция 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 поддерживает 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. | |
теперь поддерживает числа с плавающей точкой половинной точности IEEE 754 через спецификатор формата „e“. | |
Новая функция getfilesystemencodeerrors() возвращает имя режима обработки ошибок, используемого для преобразования между именами файлов в Unicode и именами файлов в байтах. | |
Функции compress() и decompress() теперь принимают именованные аргументы | |
Примечания