Баннер мобильный (1) Пройти тест

Вышел Python 3.12 — что добавили и удалили новой версии

Обзор обновлений с примерами кода

Разбор

3 марта 2024

Поделиться

Скопировано
Вышел Python 3.12 — что добавили и удалили новой версии

Содержание

    2 октября 2023 года состоялся релиз обновления языка программирования Python 3.12. Разработчики поработали над оптимизацией, улучшили сообщения об ошибках и прокачали f-строки. Подробно рассказываем о нововведениях и изменениях в Python.

    Как обновить Python

    Текущую установленную версию можно проверить с помощью команды
    python -version или python3 -version. После этого в терминале появится номер версии.

    Как обновить Python на Windows

    • Скачать установочный файл с официального сайта и запустить его. Система автоматически пройдется по шагам установки и выполнит все подготовительные действия.
    • Установить Python 3.12 из магазина приложений Microsoft Store.

    Как обновить Python на macOS

    • Можно также использовать установочный файл с официального сайта. После загрузки необходимо открыть его, принять пользовательское соглашение и установить обновление.
    • Для скачивания сторонних пакетов на macOS обычно используют менеджер Homebrew. Для обновления с его помощью необходимо поочередно выполнить следующие команды:
    brew update
    brew install python
    brew upgrade python

    Как обновить Python на Linux

    • Можно использовать репозиторий APT, в котором всегда находятся последние версии программ и инструментов. Для этого надо выполнить следующие команды в терминале:
    sudo apt-get update
    sudo apt-get upgrade

    F-строки

    Поддержка f-строк появилась в Python 3.6. С их помощью разработчики могут быстрее и удобнее интерполировать строки, используя простой синтаксис. В качестве примера базового использования f-строк можно привести вывод значений переменных:

    print(f"{a} + {b} = {sum}")

    С самого начала возможности f-строки были ограничены и пользователи не могли реализовывать с их помощью сложные конструкции. Это было связано с использованием отдельного парсера. В Python 3.9 внедрили парсер PEG, а в 3.12 перевели на него f-строки. Благодаря этому они обрабатываются как обычный код Python.

    В первую очередь это будет полезно тем, кто разрабатывает сам Python, но и обычные программисты смогут пользоваться новыми фишками. Вот некоторые из них:

    • Повторное использование кавычек. Так как теперь в f-строку можно передавать выражения, повторное использование кавычек не составляет труда. С их помощью можно обращаться к структурам данных по ключу и выводить значение. В прошлых версиях Python выдал бы ошибку.
    device = {
      "type": "phone",
      "model": "iPhone 15 Pro",
      "price": 1500,
      "currency": "USD"
    }
    
    print(f"Phone model: {device["model"]}")
    
    >>> Phone model: iPhone 15 Pro
    • Обратные слэши. Для форматирования текста в Python обычно используют обратные слэши в сочетании с буквенным обозначением специальных символов. К примеру, с помощью \n можно вставить переход на новую строку прямо в f-строке.
    phrace = ["Вышла", "новая", "версия", "Python"]
    
    print(f"{'\n'.join(phrace)}")
    
    >>> Вышла
    >>> новая
    >>> версия
    >>> Python
    • Комментарии. В версии 3.12 можно использовать комментарии в f-строках, такие же, как в обычном коде. Это позволяет подробно описывать логику программы даже в тех местах, где Python раньше это запрещал.
    device = {
      "type": "phone",
      "model": "iPhone 15 Pro",
      "price": 1500,
      "currency": "USD"
    }
    
    print(f"""Phone model: {
            device["model"] # Тут может быть комментарий
        }""")
    
    >>> Phone model: iPhone 15 Pro

    Улучшенные сообщения об ошибках

    Разработчики Python начали модифицировать сообщения об ошибках еще в версии 3.10 и продолжили дело в 3.12. Теперь пришла очередь ошибок, которые видит пользователь при неправильном подключении библиотек и сторонних модулей. Python не просто подсветит неправильную строку, но и выведет подробную рекомендацию по исправлению. Все это работает только со стандартной библиотекой. Рассмотрим примеры на модуле pi библиотеки math.

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

    ImportError: cannot import name 'py' from 'math'. Did you mean: 'pi'?

    При вызове необъявленной библиотеки Python спросит, не забыли ли вы подключить ее. При этом в терминале появится ошибка типа NameError.

    NameError: name 'math' is not defined. Did you forget to import 'math'?

    Если во время импорта поменять местами операторы from-import, то Python не просто подсветит ошибку, а подскажет, что именно произошло и как это можно исправить.

    SyntaxError: Did you mean to use 'from ... import ...' instead?

    Оптимизация и ускорение

    Команда проекта продолжает работать над оптимизацией Python. Выпуск 3.12 стал на 5% быстрее. Скорее всего, эта цифра не даст почувствовать очевидные изменения, но разработчики явно готовят кодовую базу к более значимому обновлению. Повысить скорость Python удалось благодаря следующему:

    • Ускорили операции с регулярными выражениями в re.sub(), re.subn() и re.Pattern.
    • Добавили поддержку бинарного оптимизатора BOLT (Binary Optimization and Layout Tool), что в зависимости от сценариев дает прирост производительности на 1–5%.
    • Значительно сократили использование памяти: к примеру, если раньше заголовок объекта занимал 208 байт, то теперь — 96.
    • Проверки isinstance() работают в 2–10 раз быстрее для различных протоколов.
    • tokenize.tokenize() и tokenize.generate_tokens() увеличили скорость до 64%.
    • Размер Unicode-элементов сократили на 8–16 байт.
    • Ускорили процесс создания объектов класса asyncio.Task.

    Прочие нововведения

    В новую версию Python также внесли несколько небольших нововведений, упрощающих разработку:

    • Интерпретатор теперь поддерживает Linux-ядро perf. Благодаря этому в процессе профилирования можно опознавать имена функций Python с помощью утилиты perf.
    • Псевдонимы типов теперь можно определять с помощью выражения type.
    • Добавили улучшенный синтаксис аннотации типов для обобщенных классов и функций.
    • Модуль os теперь сопровождается расширенной поддержкой Windows.
    • Методы os.listdrives(), os.listvolumes() и os.listmounts() теперь поддерживают Windows.
    • Алгоритмы SHA1, SHA3, SHA2-384, SHA2-512 и MD5 в hashlib теперь используют формально верифицированные реализации от проекта HACL*.
    • Модули uuid и sqlite3 снабдили интерфейсом командной строки: python -m sqlite3 и python -m uuid.
    • Добавили поддержку подклассов в pathlib.Path.
    • Изменили внутреннюю реализацию целых чисел. Это сделали для подготовки к следующим обновлениям.

    Что удалили?

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

    • Устаревшие функции в модуле unittest.
    • Модули asynchat, asyncore, smtpd, imp и distutils.
    • Неправильно работающие классы и функции hashlib.pbkdf2_hmac(), ssl.RAND_pseudo_bytes(), gzip.GzipFile, io.OpenWrapper, ElementTree.Element.copy().

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии