Обзор Python 3.9
Недавно в сети стала доступна для установки альфа-версия Python 3.9. Релиз планируется на октябрь 2020 года, но уже сейчас можно взглянуть, а что же он нам новенького готовит.
Установить альфа версию Python 3.9 можно с официального сайта.
Built-in Generic Types, PEP 585
Начиная с версии 3.9 появилась возможность использовать привычные для нас built-in коллекции в качестве аннотаций с указанием типа содержимого этих коллекций. Напомню, что ранее для таких целей использовались объекты List
, Dict
из модуля typing
. Вот как это теперь выглядит:
# как было до 3.9
from typing import List
def func(payload: List[str]) -> str:
return 'Python < 3.9'
# как можно начиная с 3.9
def func(payload: list[str]) -> str:
return 'Python 3.9'
Операторы объединения и обновления словаря, PEP 584
В Python 3.9 появилось 2 новых оператора |
и |=
, применяемых для работы со словарями.
payload_1 = {'a': 1, 'b': 2, 'c': 3}
payload_2 = {'d': 4, 'e': 5, 'f': 6}
# объединение двух словарей в 1
payload_1 | payload_2 # -> {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
# обновление словаря payload_1 содержимым словаря payload_2
payload_1 |= payload_2
print(payload_1)
0: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
Теперь и тип dict обзавёлся своим оператором объединения |
как и его собрат тип set. Вкусовщина конечно, но мне ближе старые привычные способы "распаковки":
payload_1 = {'a': 1, 'b': 2, 'c': 3}
payload_2 = {'d': 4, 'e': 5, 'f': 6}
{**payload_1, **payload_2}
Статусы HTTP
В модуль http
были добавлены новые HTTP статусы:
import http
http.HTTPStatus.EARLY_HINTS # 103
http.HTTPStatus.IM_A_TEAPOT # 418
http.HTTPStatus.TOO_EARLY # 425
Если вам интересно, что означает статус I am teapot
, то прочитать можно здесь. В остальном, "долгожданный" апдейт 🤣
Обновления в math
В модуле math
появилось несколько интересных апдейтов, а именно:
- функция нахождение наибольшего общего делителя теперь может принимать неограниченное количество аргументов, ранее она принимала только 2
import math
math.gcd(10, 15, 20, 100)
- появилась функция нахождения наименьшего общего кратного,
math.lcm
removeprefix() & removesuffix(), PEP 616
У строк появились 2 новых методы с говорящим за себя названием:
string = 'prefixText'
string.removeprefix('prefix')
0: 'Text'
string.removesuffix('Text')
1: 'prefix'
Метод removeprefix
удаляет подстроку в начале строки, а removesuffix
удаляет подстроку в конце строки.
Обновлённый парсер кода, PEP 617
Начиная с Python 3.9 для парсинга используется PEG, ранее использовали LL. Выигрыша в производительности нет, но благодаря PEG в будущем возможно вводить более гибкие конструкции в язык. Модуль ast
уже использует PEG для разбора исходного кода скрипта. Одним из инициаторов этого PEP был наш любимый Гвидо, у него в блоге есть целая серия постов на эту тему.