Что нового в Python 3.9: ключевые обновления и улучшения языка

Python — это язык программирования, который с каждым годом становится всё популярнее. Он удобен, мощен и при этом лёгок для изучения. Разработчики языка не стоят на месте и постоянно модернизируют его, добавляя новые возможности, улучшая производительность и делая код ещё более лаконичным и понятным. Если вы уже знакомы с Python, наверняка не раз задумывались, что нового появилось в свежих версиях. Сегодня мы подробно разберём, что интересного и полезного появилось в Python 3.9 — версии, выпущенной в октябре 2020 года, которая принесла несколько существенных улучшений и нововведений. Даже если вы ещё не обновили свою среду разработки, эта статья поможет понять, стоит ли это делать и какие возможности станут доступны.

Почему важно смотреть новости в Python

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

Для программиста важно знать и применять новые инструменты, потому что это:

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

Python 3.9 — отличный пример того, как даже небольшие, на первый взгляд, изменения могут оказать значительное влияние на повседневную работу.

Основные новшества в Python 3.9

В 3.9 версии разработчики сосредоточились как на новых возможностях, так и на улучшении производительности и удобства. Ниже подробно рассмотрим ключевые новинки.

1. Новый синтаксис для аннотаций типов с использованием встроенных generics

Если вы работаете с типами (особенно популярно в больших проектах и при использовании статической типизации с помощью mypy), то скорее всего знаете, как долго приходилось импортировать специальный модуль typing для таких вещей, как List, Dict и т.д.

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

Рассмотрим пример:

from typing import List, Dict

# Старый способ:
def greet_all(names: List[str]) -> None:
    for name in names:
        print("Hello", name)

# Новый способ в Python 3.9:
def greet_all(names: list[str]) -> None:
    for name in names:
        print("Hello", name)

То есть вместо того, чтобы импортировать List и Dict из typing, теперь можно просто использовать привычные встроенные типы с квадратными скобками для указания параметров типа. Это упрощает и сокращает аннотации, делает код более «питоничным».

2. Операторы объединения и обновления для словарей

Работать со словарями (dict) — это основа Python. Раньше, чтобы объединить два словаря, приходилось писать что-то вроде dict.update() или использовать громоздкое выражение через **.

В 3.9 появились очень удобные операторы | и |= для объединения и обновления словарей соответственно.

Операция Описание Пример Результат
a | b Объединение словарей в новый
a = {'x': 1, 'y': 2}
b = {'y': 3, 'z': 4}
res = a | b
print(res)
{‘x’: 1, ‘y’: 3, ‘z’: 4}
a |= b Обновление словаря a элементами из b
a = {'x': 1, 'y': 2}
b = {'y': 3, 'z': 4}
a |= b
print(a)
{‘x’: 1, ‘y’: 3, ‘z’: 4}

Обратите внимание, что при конфликте ключей значения из второго словаря перезаписывают значения первого.

3. Улучшения в стандартной библиотеке

Python 3.9 обновил и улучшил множество встроенных модулей — от модулей для работы с путями и файлами, до утилитарных функций. Вот несколько наиболее значимых изменений:

  • Модуль zoneinfo — теперь стандартная библиотека имеет поддержку часовых поясов IANA, что облегчает работу с datetime и временем в разных регионах мира.
  • Модуль functools получил функцию cache, которая работает как декоратор для кэширования вызовов функций, что заметно упрощает мемоизацию.
  • Оптимизация в модуле math: добавлены новые функции и улучшена производительность уже существующих.

Эти изменения дают разработчикам более современные инструменты, сокращая необходимость использовать сторонние библиотеки.

4. Новые возможности в работе со строками и путями

В Python 3.9 улучшилась обработка строк, в частности, появились новые методы и оптимизации для более эффективной и простой работы сразу «из коробки».

Кроме того, модуль os и связанные с файловой системой где-то получили маленькие, но полезные новшества, что особенно пригодится разработчикам, создающим кроссплатформенные приложения.

Другие полезные изменения

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

  • Оптимизация и ускорение работы интерпретатора — в некоторых случаях приложения работают быстрее именно благодаря обновлённой внутренней реализации функций.
  • Новые возможности для диагностики ошибок — обновлённые сообщения об ошибках стали более понятными и информативными, что облегчает отладку.
  • Добавлен тип str.removeprefix() и str.removesuffix() — теперь удалять префиксы и суффиксы из строк стало проще и чище на синтаксисе, без дополнительных условий.

Пример использования removeprefix()

text = "Python3.9"
print(text.removeprefix("Python"))  # Выведет "3.9"

Что стоит знать, прежде чем обновлять версию

Хотя Python 3.9 приносит много отличных возможностей, важно помнить, что обновление — всегда чуть-чуть рискованный процесс. Нужно проверить совместимость вашего кода и используемых библиотек, особенно если работаете в корпоративных или критических по надежности проектах.

Ниже несколько советов, как подготовиться к обновлению:

  • Проведите тестирование вашего кода на версии 3.9 в отдельной среде.
  • Обратите внимание на предупреждения об устаревших функциях или модулях.
  • Обновите зависимости и библиотеки, если для них доступны версии, поддерживающие Python 3.9.
  • Изучите официальные документы по измененным или удалённым функциям.

Краткий обзор ключевых нововведений — таблица

Новшества Описание Пример
Генерики (Generics) с встроенными типами Использование list[str], dict[str, int] вместо typing.List и typing.Dict def f(items: list[str]) -> None:
Операторы | и |= для словарей Простой способ объединять и обновлять словари c = a | b
a |= b
str.removeprefix() и str.removesuffix() Удаление префиксов и суффиксов из строк "prefix_string".removeprefix("prefix_")
Модуль zoneinfo Поддержка часовых поясов IANA from zoneinfo import ZoneInfo
functools.cache Лёгкий кэш для функций @cache

Заключение

Python 3.9 — это важный шаг вперёд для языка, который делает его ещё более удобным и современным. Новые возможности, такие как использование встроенных generics, операторы объединения словарей и удобные методы строк, значительно упрощают жизнь разработчикам. Кроме этого, улучшения в стандартной библиотеке и оптимизации интерпретатора открывают дополнительные горизонты для создания эффективного и чистого кода.

Если вы ещё не пробовали Python 3.9, самое время обновиться и познакомиться с его новинками. Главное — подойти к этому аккуратно, проверить совместимость и насладиться написанием кода с новыми удобными инструментами. Ведь именно такие, казалось бы, мелкие шаги постепенно превращают разработчика в мастера своего дела.

Надеюсь, эта статья помогла вам лучше понять, что нового появилось в Python 3.9 и почему стоит обратить на это внимание. Пробуйте, экспериментируйте и пишите код с удовольствием!