октябрь 7, 2020 · python программирование патч

Python 3.9 уже здесь. Краткий обзор

Итак. Оно вышло, что нас ждет на ближайший примерно год?
Не будем заостряться на битность по умолчанию и прочую фигню, а взглянем на суть

PEP 584

В этом PEP'е нам услужливо добавили операторы слияния ( | ) и обновления словарей ( | = ) в стандартный класс dict. Взглянем на примеры из стандарта.

Слияние

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

Обновление

>>> x |= y
>>> x
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}

Заделали такую фичу просто для того, чтобы избавится от страшных конструкций вида {**d1, **d2}, которые не видны в коде.

PEP 585

Добавили подсказки обобщенных типов внутрь стандартной библиотеки. Не нужно теперь импортировать для этого модуль. За подробностями можно взглянуть модуль typing. Он весь теперь в стандартной библиотеке.

a: list[str] = list()

def print_items(array: list[str]) -> None:
    pass

PEP 614

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

Тут проще показать, чем пересказывать этот PEP. Кому надо, тот сходит посмотрит сам.

Было

buttons = [QPushButton(f'Button {i}') for i in range(10)]

@buttons[0].clicked.connect
def spam():
    pass

Стало

button_0 = buttons[0]

@button_0.clicked.connect
def spam():
    pass

PEP 616

Добавили пару новых методов для класса строк

str.removeprefix(prefix)
str.removesuffix(suffix)

Как не трудно угадать, одна удаляет подстроку из начала строки, вторая – из конца.

>>> 'hello_world'.removeprefix ('hello_') 
world
>>> 'hello_world'.removesuffix ('_world') 
hello

PEP 593

Тут нам выдают гибкие аннотации функций и переменных с помощью произвольных метаданных. Подробности тут. С этим стандартом python все более начинает напоминать компилируемые языки.

Кроме указанного нам нагрузили: