Python 3.6¶
Бета-версія Python 3.6 beta 1 була випущена 12 вересня 2016 року. Огляд нових можливостей можна знайти тут:
Нові синтаксичні можливості | Статус | |
Форматування рядкових літералів | Реалізовано | |
Підкреслення в числових літералах | Реалізовано | |
Асинхронні генератори | ||
Синтаксис анотацій змінних (попередній) | Реалізовано | |
Асинхронні включення | ||
Нові вбудовані можливості | ||
Збереження порядку 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] | |
Import тепер генерує нове виключення 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 для взаємодії з crypto 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. | |
Додано серверні та клієнтські специфічні протоколи TLS для SSLContext. | |
Додано SSLContext.post_handshake_auth для увімкнення та ssl.SSLSocket.verify_client_post_handshake() для ініціації автентифікації після рукостискання TLS 1.3. | |
тепер підтримує числа з плаваючою точкою IEEE 754 половинної точності через формат-специфікатор „e“. | |
Нова функція getfilesystemencodeerrors() повертає назву режиму помилок, що використовується для перетворення між іменами файлів Unicode та байтовими іменами файлів. | |
Функції compress() та decompress() тепер приймають іменовані аргументи | |
Примітки