Перевод: Ayushi Rawat — Python 3.9: All You need to know
Python всегда развивается вместе с потребностями сообщества, и в будущем он станет наиболее часто используемым языком.
Следующая версия Python предлагает более быстрый график выпуска, повышение производительности, удобные новые строковые функции, операторы объединения словарей и более согласованное и стабильное внутренние API.
В этой статье мы рассмотрим:
Одна из моих любимых новых функций
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.
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, что и старый синтаксический анализатор.
Еще одно изменение, внесенное в 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 обеспечивает поддержку базы данных часовых поясов IANA в стандартной библиотеке. Он добавляет zoneinfo.ZoneInfo, конкретную реализацию datetime.tzinfo, подкрепленную данными часового пояса системы.
В каждой версии Python улучшена производительность по сравнению с предыдущей версией. Python 3.9 включает два больших улучшения, которые повышают производительность без каких-либо изменений в существующем коде.
Первое улучшение связано с более широким использованием протокола vectorcall. Он вызывает множество общих вызовов функций за счет минимизации или удаления временных объектов. Python 3.9 представляет несколько новых встроенных модулей, включая range, tuple, set, frozenset, list, dict — используйте vectorcall, которые ускоряют выполнение.
До этого момента Python разрабатывался и выпускался с периодичностью в восемнадцать месяцев. PEP 602 предложил, чтобы группа разработчиков Python приняла годовой цикл выпуска, и это предложение было принято.
С каждым новым выпуском Python становится быстрее и мощнее. Python упрощает управление распространенными типами данных.
Вероятно, не все эти изменения относятся к чему то что вы используете каждый день, но хорошо хотя бы знать все эти изменения, поскольку они могут пригодиться в любой момент.
Вы можете связаться со мной в twitter
Также посмотрите мои другие блоги:
Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…
Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…
Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…
Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…
Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…
Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…
View Comments
Спасибо за коротенькую статью.
Благодарю, полезно будет почитать.