Python 3.9: все, что вам нужно знать
Перевод: Ayushi Rawat — Python 3.9: All You need to know
Python всегда развивается вместе с потребностями сообщества, и в будущем он станет наиболее часто используемым языком.
Следующая версия Python предлагает более быстрый график выпуска, повышение производительности, удобные новые строковые функции, операторы объединения словарей и более согласованное и стабильное внутренние API.
В этой статье мы рассмотрим:
- — Объединение словарей и их обновление через итерируемый объект
- — Новый строковые методы
- — Подсказки типов
- — Новые математические функции
- — Новый парсер
- — Область адресов IPv6
- — Новый модуль: Zoneinfo
- — Другие изменения
Объединение словарей
Одна из моих любимых новых функций
Python 3.9 касаются класса dict. Если у вас есть два словаря a и b, теперь вы можете использовать новый оператор для их объединения и обновления.
У нас есть оператор слияния |:
И оператор обновления |=, который обновляет исходный словарь:
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.
Строковые методы
removeprefix() и removesuffix()
str.removeprefix (substring: string) — это метод, возвращает новую строку с обрезанным префиксом.
str.removesuffix (substring: string) — это метод, возвращает новую строку с обрезанным суффиксом
Эти две функции выполняют то, что вам в противном случае пришлось бы делать используя 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, подкрепленную данными часового пояса системы.
Другие языковые изменения
- __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
Также посмотрите мои другие блоги:
- How to make your own Google Chrome Extension
- Web Scraping Coronavirus Data into MS Excel
- Instagram Bot
- Twitter Bot
- GitHub Profile README
- Git commit with past date
Спасибо за коротенькую статью.
Благодарю, полезно будет почитать.