После 18 месяцев разработки представлен значительный релиз языка программирования Python 3.5.
Среди добавленных в Python 3.5 новшеств:
- Добавлен новый модуль zipapp, предоставляющий API и утилиту командной строки для создания упакованных в один файл приложений, которые можно запустить командой «python приложение.pyz». Для создания исполняемого архива достаточно поместить все файлы программы в отдельную директорию, создать выполняемый по умолчанию скрипт __main__.py и выполнить команду «python -m zipapp имя_директории»;
- Расширено применение операторов распаковки «*» и «**», которые теперь можно использовать для произвольного числа распаковок при вызове функции или при манипуляциях с множествами, кортежами, списками и словарями.
(ранее допускалась только одна распаковка). Например, для функции «def fn(a, b, c, d)» можно выполнить fn(**{‘a’: 1, ‘c’: 3}, **{‘b’: 2, ‘d’: 4})»), а для словаря — «{*range(4), 4, *(5, 6, 7)}»; - Поддержка использования оператора форматирования вывода «%» для объектов bytes и bytearray по аналогии с тем, как выполняется форматирование строк. Например, выполнение «b’x=%i y=%f’ % (1, 2.5)» приведёт к выводу «b’x=1 y=2.500000′»;
- В стандартной библиотеке представлена новая функция os.scandir() для очень быстрого обхода содержимого директорий. Выполнение os.walk() на базе новой функции работает в 3-5 раз быстрее на POSIX-системах и в 7-20 раз быстрее в Windows, за счёт сокращения числа вызовов os.stat();
- Возможность автоматического повторного выполнения прерванных системных вызовов без установки отдельных обработчиков EINTR или InterruptedError;
- Представлен модуль typing, который позиционируется в качестве нового стандарта для задания аннотаций типов. При подключении модуля можно предоставить данные о типах аргументов и возвращаемого значения функции, например «def greeting(name: str) — str»;
- Реализована функция
math.isclose() для приблизительного сравнения значений с заданным уровнем точности. Например, «math.isclose(5.0, 4.99998, abs_tol=0.00003)» вернёт True; - В обвязке для запуска Python на платформе Windows добавлена поддержка работы в виртуальных окружениях;
- Искоренена концепция PYO-файлов, использовавшихся для хранения оптимизированного байткода. Для размещения как оптимизированного, так и неоптимизированного байткода теперь применяются единые файлы «.pyc»;
- Новый механизм для загрузки модулей-расширений, обеспечивающий возможность инициализации в несколько стадий;
- Значительно улучшены средства асинхронного программирования, благодаря поддержке нового async- и await-синтаксиса для определения сопрограмм, асинхронно выполняемых объектов и итераций. Например, для создания и вызова сопрограммы можно указать «async def http_get(domain)» и «data = await db.fetch(‘SELECT …’)»;
- Возможность изменения обработки исключений StopIteration внутри генераторов;
- Класс collections.OrderedDict переписан на языке Си, что позволило ускорить его выполнение от 4 до 100 раз. На Си также переписана функция functools.lru_cache();
- Добавлен новый вызов subprocess.run() для быстрого запуска подпроцессов;
- В стандартной библиотеке по умолчанию отключена поддержка SSLv3;
- Добавлен новый оператор «@» для умножения матриц. Например, вместо «S = dot((dot(H, beta) — r).T, dot(inv(dot(dot(H, V), H.T)), dot(H, beta) — r))» теперь можно использовать более понятное представление «S = (H @ beta — r).T @ inv(H @ V @ H.T) @ (H @ beta — r)».