Написать пост

Что нового в Python 3.12

Собрали основные фишки последнего обновления Python для тех, кому сложно (или не особо хочется) лезть в документацию.

Обложка поста Что нового в Python 3.12

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.12 1

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 и прочее. Надеюсь, вам удастся облегчить свой кодинг такими новшествами. Прилагаю ссылку на анонс и скачиваемый дистрибутив для разных ОС.

Напишите в комментариях, какой апдейт вам понравился больше всего.

Следите за новыми постами
Следите за новыми постами по любимым темам
19К открытий20К показов