Ques/Help/Req Что нового в Python 3.12

XakeR

Member
Регистрация
13.05.2006
Сообщения
1 912
Реакции
0
Баллы
16
Местоположение
Ukraine
12 августа вышел Python 3.12.0rc1, а значит, пора пройтись по хайлайтам. Собрали основные фишки для тех, кому сложно (или не особо хочется) лезть в документацию.

Улучшенный подсказки для импорта​


Если вы забыли подтянуть библиотеку инструкцией import, то теперь интерпретатор вежливо подскажет (‘did you forget…’) и укажет на опечатки в названии подключаемого модуля:

from collections import chainmap Traceback (most recent call last): File «<stdin>», line 1, in <module> ImportError: cannot import name ‘chainmap’ from ‘collections’. Did you mean: ‘ChainMap’?

Переиспользование кавычек в f-строках​


Теперь напрягать внимание, чтобы вложить в строку объект в кавычках, не нужно. Система поймет, где открывающая, а где — закрывающая кавычка, любое количество раз:

>>> songs = [‘Take me back to Eden’, ‘Alkaline’, ‘Ascensionism’] >>> f»This is the playlist: {«, «.join(songs)}» ‘This is the playlist: Take me back to Eden, Alkaline, Ascensionism’

Вот такая «акробатика» тоже скомпилируется:

>>> f»{f»{f»{f»{f»{f»{1+1}»}»}»}»}»}» ‘2’

Обратная косая черта в f-строках​


До Python 3.12 использовать backslash в интерполируемых строках было нельзя. Теперь же мы смело можем внедрять и разрывы строк (n), и переносы кареток (r), и другие подобные символы:

>>> print(f»This is the playlist: {«n».join(songs)}») This is the playlist: Take me back to Eden Alkaline Ascensionism >>> print(f»This is the playlist: {«N{BLACK HEART SUIT}».join(songs)}») This is the playlist: Take me back to Eden
♥
Alkaline
♥
Ascensionism

Ускоренное включение​


В PEP 709 описан апгрейд включений словарей, списков и сетов. Ускорение обещается вплоть до двукратного. За это спасибо и нашему соотечественнику, контрибьютору Python Владимиру Макееву.

Порядок слов в инструкции импорта​


В крайней версии Python 3.12, наконец, стало возможным импортировать модули в адекватном для английского языка порядке слов:

import LinearRegression from sklearn.linear_model
Python 3.120


TypedDict для определения типов **kwargs​


Если вам доводилось налегать на kwargs (keyword arguments – аргументы c ключевыми словами), то вы помните, что оператор двойная звездочка издавна упаковывает аргументы, переданные по имени, в словарь:

>>> def fun(**kwargs): >>> print(kwargs) # выводим словарь на консоль >>> >>> fun(name=»Tom», age=»38″, company=»Google») >>> fun(language=»Python», version=»3.11″) {‘name’: ‘Tom’, ‘age’: ’38’, ‘company’: ‘Google’} {‘language’: ‘Python’, ‘version’: ‘3.11’}

Теперь мы можем использовать TypedDict (буквально – словарь с заданными типами значений) для того, чтобы такие аргументы получили большую свободу типов:

from typing import TypedDict, Unpack class Movie(TypedDict): name: str year: int def foo(**kwargs: Unpack[Movie]): …

Перезапись декоратора​


Если у нас есть класс Base c методом get_color(), и в наследном классе GoodChild мы хотим эту функцию переопределить, то инструкцией @override это сделать очень просто:

from typing import override class Base: def get_color(self) -> str: return «blue» class GoodChild(Base): @override # ok: overrides Base.get_color def get_color(self) -> str: return «yellow»

Псевдонимы типов​


Если мы объявим кортеж Point, который состоит из двух чисел с плавающей запятой, и собираемся создавать его экземпляры, с этим поможет инструкция type:

type Point = tuple[float, float]

Заключение​


Помимо этих новшеств, в описании релиза вы найдете и другие улучшения для продвинутых: буферный протокол, выделенный на каждый интерпретатор GIL и прочее. Надеюсь, вам удастся облегчить свой кодинг такими новшествами. Прилагаю ссылку на анонс и скачиваемый дистрибутив для разных ОС.

Напишите в комментариях, какой апдейт вам понравился больше всего.
 
198 154Темы
635 125Сообщения
3 618 410Пользователи
MFzoneНовый пользователь
Верх