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’?
Теперь напрягать внимание, чтобы вложить в строку объект в кавычках, не нужно. Система поймет, где открывающая, а где — закрывающая кавычка, любое количество раз:
>>> 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’
До Python 3.12 использовать backslash в интерполируемых строках было нельзя. Теперь же мы смело можем внедрять и разрывы строк , и переносы кареток (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
Если вам доводилось налегать на 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 и прочее. Надеюсь, вам удастся облегчить свой кодинг такими новшествами. Прилагаю ссылку на анонс и скачиваемый дистрибутив для разных ОС.
Напишите в комментариях, какой апдейт вам понравился больше всего.
Улучшенный подсказки для импорта
Если вы забыли подтянуть библиотеку инструкцией 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 в интерполируемых строках было нельзя. Теперь же мы смело можем внедрять и разрывы строк , и переносы кареток (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
Ускоренное включение
В PEP 709 описан апгрейд включений словарей, списков и сетов. Ускорение обещается вплоть до двукратного. За это спасибо и нашему соотечественнику, контрибьютору Python Владимиру Макееву.
Порядок слов в инструкции импорта
В крайней версии Python 3.12, наконец, стало возможным импортировать модули в адекватном для английского языка порядке слов:
import LinearRegression from sklearn.linear_model
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 и прочее. Надеюсь, вам удастся облегчить свой кодинг такими новшествами. Прилагаю ссылку на анонс и скачиваемый дистрибутив для разных ОС.
Напишите в комментариях, какой апдейт вам понравился больше всего.