Python 3.9: все, что вам нужно знать

Spread the love

Перевод: Ayushi RawatPython 3.9: All You need to know

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

Следующая версия Python предлагает более быстрый график выпуска, повышение производительности, удобные новые строковые функции, операторы объединения словарей и более согласованное и стабильное внутренние API.

В этой статье мы рассмотрим:

  • — Объединение словарей и их обновление через итерируемый объект
  • — Новый строковые методы
  • — Подсказки типов
  • — Новые математические функции
  • — Новый парсер
  • — Область адресов IPv6
  • — Новый модуль: Zoneinfo
  • — Другие изменения

Объединение словарей

Одна из моих любимых новых функций
Python 3.9 касаются класса dict. Если у вас есть два словаря a и b, теперь вы можете использовать новый оператор для их объединения и обновления.

У нас есть оператор слияния |:

Alt Text

И оператор обновления |=, который обновляет исходный словарь:

a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
a |= b
print(a)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}

Если наши словари имеют общий ключ, будет использоваться пара ключ-значение из второго словаря:

a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'}
b = {4: 'd', 5: 'e', 6: 'but different'}
print(a | b)
{1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}

Обновление словаря с помощью итераций

Еще одно интересное поведение оператора |= — это возможность обновлять словарь новыми парами ключ-значение с помощью итерируемого объекта — например, списка или генератора:

a = {'a': 'one', 'b': 'two'}
b = ((i, i**2) for i in range(3))
a |= b
print(a)
{'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4}

Если мы попытаемся сделать то же самое со стандартным оператором объединения |, мы получим ошибку TypeError, поскольку он разрешит объединение только между типами dict.

Alt Text

Строковые методы

removeprefix() и removesuffix()

str.removeprefix (substring: string) — это метод, возвращает новую строку с обрезанным префиксом.

str.removesuffix (substring: string) — это метод, возвращает новую строку с обрезанным суффиксом

Alt Text

Эти две функции выполняют то, что вам в противном случае пришлось бы делать используя string[len(prefix):] для префикса и string[:-len(suffix)] для суффикса. Это очень простые операции и, следовательно, очень простые функции, но, учитывая, что вы можете выполнять эти операции довольно часто, неплохо иметь встроенную функцию, которая сделает это за вас.

Подсказки типов

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

Это нормально, но иногда это может сбивать с толку!

Для статического выделения типов данных используется подсказки типов. Это было введено в Python 3.5. Начиная с версии 3.5, мы можем указывать типы, но это довольно громоздко.

Новое обновление изменило этот механизм. Теперь вы можете использовать встроенные типы коллекций (list и dict) в качестве универсальных типов (generic types).

Ранее нам приходилось импортировать типы List или Dict из typing.

def greet_all(names: list[str]) -> None:
    for name in names:
        print("Hello", name)

Теперь нет необходимости вызывать List из typing.List.

Новые математические функции

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

import math

# Greatest common divisor
math.gcd(80, 64, 152)
# 8

Ранее функция gcd, которая вычисляет наибольший общий делитель, могла применяться только к 2 числам, что заставляло программистов делать что-то вроде этого math.gcd (80, math.gcd (64, 152)) при работе с большим количеством чисел. Начиная с Python 3.9, мы можем применить его к любому количеству значений.

Первое новое дополнение к математическому модулю — это функция math.lcm:

# Least common multiple
math.lcm(4, 8, 5)
# 40

math.lcm вычисляет наименьшее общее кратное своих аргументов. Как и в случае с GCD, он допускает переменное количество аргументов.

Новый парсер

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

Python 3.9 использует новый синтаксический анализатор, основанный на PEG. Раньше Python использовал LL (1). PEG более гибок, чем LL (1), когда дело доходит до создания новых функций на языке. В официальной документации говорится, что эта гибкость будет видна начиная с версии Python 3.10.

Модуль ast использует новый синтаксический анализатор и выдает тот же AST, что и старый синтаксический анализатор.

Адреса IPv6

Еще одно изменение, внесенное в Python 3.9, — это возможность указывать область адресов IPv6. Области IPv6 используются, чтобы указать, в какой части Интернета будет действителен соответствующий IP-адрес.

Область может быть указана в конце IP-адреса с помощью знака% — например: 3FFE:0:0:1:200:F8FF:FE75:50DF% 2 — так что этот IP-адрес находится в области 2, которая является адресом локального канала (link-local address).

Итак, если вам нужно иметь дело с адресами IPv6 в Python, теперь вы можете сделать это следующим образом:

from ipaddress import IPv6Address
addr = IPv6Address('ff02::fa51%1')
print(addr.scope_id)
# "1" - interface-local IP address

Примечание
Два адреса с разными областями действия не равны при сравнении с использованием базовых операторов Python.

Новый модуль

Zoneinfo

Модуль zoneinfo обеспечивает поддержку базы данных часовых поясов IANA в стандартной библиотеке. Он добавляет zoneinfo.ZoneInfo, конкретную реализацию datetime.tzinfo, подкрепленную данными часового пояса системы.

Alt Text

Другие языковые изменения

  • __import__() теперь вызывает ImportError вместо ValueError, которое раньше возникало, когда относительный импорт проходил мимо его пакета верхнего уровня.
  • «» .replace («», s, n) теперь возвращает s вместо пустой строки для всех ненулевых n. Теперь он соответствует «» .replace («», s).

Python по умолчанию становится быстрее

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

Первое улучшение связано с более широким использованием протокола vectorcall. Он вызывает множество общих вызовов функций за счет минимизации или удаления временных объектов. Python 3.9 представляет несколько новых встроенных модулей, включая range, tuple, set, frozenset, list, dict — используйте vectorcall, которые ускоряют выполнение.

Python переходит на годовой цикл выпуска

До этого момента Python разрабатывался и выпускался с периодичностью в восемнадцать месяцев. PEP 602 предложил, чтобы группа разработчиков Python приняла годовой цикл выпуска, и это предложение было принято.

Заключение

С каждым новым выпуском Python становится быстрее и мощнее. Python упрощает управление распространенными типами данных.

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

Вы можете связаться со мной в twitter

Также посмотрите мои другие блоги:

Ресурсы

Была ли вам полезна эта статья?
[6 / 5]

Spread the love
Подписаться
Уведомление о
guest
2 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Андрей
Андрей
3 лет назад

Спасибо за коротенькую статью.

Иван
Иван
2 лет назад

Благодарю, полезно будет почитать.