Новости
Что нового в 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 одним однострочником.

Читать »

Трюки терминала Bash

Полезные комбинации клавиш (хоткеи) и небольшие хитрости, которые сделают Вашу работу в Linux более эффективной.

Читать »
Фото Python: Встроенные типы данных (list, set, dict, etc)

Python: Встроенные типы данных (list, set, dict, etc)

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

Фото Python: типы данных, переменные, логическое ветвление и циклы

Python: типы данных, переменные, логическое ветвление и циклы

Первая часть заметок о Python. О базовых типах, переменных, ветвлении и циклах.

Фото Как установить PostgreSQL на Linux и создать базу и пользователя

Как установить PostgreSQL на Linux и создать базу и пользователя

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

Фото Как сделать свою middleware в Django (с примерами)

Как сделать свою middleware в Django (с примерами)

Middleware или "промежуточное программное обеспечение" - элегантный способ установить общие правила обработки запросов и ответов приложения. Давайте напишем парочку middleware, чтобы понять, как они работают.

Фото Новый синтаксис старой команды with в Python 3.10

Новый синтаксис старой команды with в Python 3.10

Как же долго моё чувство прекрасного страдало… Но в Python 3.10 появился новый парсер синтаксических конструкций Python!

Фото Добавляем постраничную пагинацию на Django сайт

Добавляем постраничную пагинацию на Django сайт

На сайтах часто встречаются многостраничные объекты: список товаров, список заметок и т.д. Поэтому важно уметь добавить навигацию по страницам на Django-проекте.

Фото Новый оператор match-case в Python

Новый оператор match-case в Python

В новой версии Python (3.10) появится новый оператор. Новый оператор сопоставления по шаблону (match-case).

Фото Нет слов, одни... однострочники

Нет слов, одни... однострочники

На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.