Новости
Что нового в Python 3.10

Что нового в Python 3.10

Вышла новая версия языка программирования Python 3. В ней добавлены новые синтаксические конструкции, улучшения уже имеющихся возможностей.

4-го октября 2021-го года вышла новая версия ЯП Python. Пройдёмся по основным изменениям!

Новый синтаксис для написания объединений типов

Для типов данных была перегружена операция битового или – |. Теперь для указания типов переменных стоит использовать не typing.Union[A, B], а A | B. Так, например, если тип принимаемого функцией значения должен быть строкой или массивом строк, вместо

from typing import Union


def required_permission(perm: Union[str, list[str]]):
    pass

пишем

def required_permission(perm: str|list[str]):
    pass

Аналогично можно делать проверку isinstance. Вместо

a = 5

if isinstance(a, int) or isinstance(a, str):
    pass

пишем

a = 5

if isinstance(a, int|str):
    pass

Для указания типа typing.Optional[int] теперь следует использовать int | None (не NoneType).

Замечу, что лучше поддерживать интерфейсы функций, методов и т.д. более строгими – без всяких Union и Optional. Но если есть необходимость в этом, новый синтаксис выглядит более читаемым.

Улучшен синтаксис для использования контекстных менеджеров

Я уже писал о данной доработке, которую внесли в феврале. Вкратце: раньше в конструкции with as нельзя было использовать круглые скобки для группировки открытия нескольких контекстов. Теперь можно. Иными словами:

with (
    CtxManager1() as example1,
    CtxManager2() as example2
):
    pass

Такой код приводил к синтаксической ошибке. Вместо этого приходилось писать как-то так:

with CtxManager1() as example1, \
     CtxManager2() as example2:
    pass

При этом во всех остальных конструкциях языка можно (и нужно) писать не с помощью \, а именно при помощи скобок.

С новым парсером в Python 3.10 появилась возможность писать и в привычном ("скобочном") стиле!

Модуль distutils объявлен устаревшим

distutils использовался для пакетирования Python проектов. Пакеты Python же можно установить чере pip – менеджер пакетов Python. Так что эта информация в основном полезна для разработчиков, публикующих свои наработки.

У модуля distutils есть куча проблем с поддержкой документации, да и сам он довольно запутанный. При этом есть множество других модулей, которые также позволяют пакетировать, при этом поддерживаются лучше и более чётко описаны.

Логичным решением было отказаться от distutils. Во многих аспектах его заменой является setuptools.

С версии Python 3.12 модуль distutils перестанет поддерживаться.

Конструкция match-case для сопоставления по шаблону

Пожалуй, самым большим новшеством является конструкция match-case, о которой я уже писал в феврале. Если коротко, то это монстр для операций ветвления – if "на стероидах".

Например, если мы хотим получить от пользователя команду и выполнить по ней какое-то действие, то код будет выглядеть подобным образом:

command = input('Выберете действие: ')

match command.split():
    case ["quit"]:
        exit(0)
    case ["go", direction]:
        user.move(direction)
    case ["drop", *objects]:
        for obj in objects:
            user.drop(obj)
    case _:
        print(f"Неизвестная команда '{command!r}'")

В match имеем некоторый объект, его мы сопоставляем с шаблонами из case-ов. Если подходит – выполняется блок case. Больше примеров по ссылке.

Также были улучшены средства отладки, определения псевдонимов типов, переработаны внутренности cpython, добавлены исправления, улучшения и баги.

Не знаю как вы, а я уже на ноуте обновил Python – уж слишком вкусно выглядят обновы!

Также может быть вам интересно:

Как получить дерево директорий на Bash одним однострочником

Велик и могуч язык Bash! И много в нём возможностей для написания маленьких, но гордых однострочных команд, что могут, например, вывести дерево директорий на Bash одним однострочником.

Читать »
Фото Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

Современные сайты редко ограничиваются только текстом и вёрсткой. Часто в заметках красуются фотографии, а рядом с описанием товаров - их изображения.

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

Во время работы программы часто нужно сохранять некоторые важные записи о процессе выполнения команды. В Python есть довольно мощный модуль для работы с логами - давайте разберёмся с тем, как его использовать.

Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Microsoft открывает исходники, а её IDE супер-популярна

Microsoft открывает исходники, а её IDE супер-популярна

Решил сложить пару фактов и немного над этим поразмыслить. Реально ли Microsoft "переобулись"?

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!