Увидел свет язык программирования Python 3.5.0
После 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)».
© OpenNet