На текущий момент это самая крутая статья про возможности Python 3.12, которая мне попадалась:
https://medium.com/techtofreedom/5-handy-python-3-12-new-features-that-improve-your-coding-experience-fe2d6e1f05b4
Ничего лишнего - только самые полезные штуки освещены.
Кроме одной. Но я ее расскажу прямо сейчас.
Вместо использования TypeVar теперь можно указывать обобщенный тип сразу после имени функции в квадратных скобках:
В предыдущих версиях для этой цели использовался TypeVar:
Все остальное в этой статье есть.
Из новых возможностей мне больше всего нравится возможность использовать один и тот же тип кавычек снаружи и внутри f-строк и декоратор @override.
Пожалуй, это стоит того, чтобы перейти на 3.12.
Кто перешел уже? Как вам?
#python
https://medium.com/techtofreedom/5-handy-python-3-12-new-features-that-improve-your-coding-experience-fe2d6e1f05b4
Ничего лишнего - только самые полезные штуки освещены.
Кроме одной. Но я ее расскажу прямо сейчас.
Вместо использования TypeVar теперь можно указывать обобщенный тип сразу после имени функции в квадратных скобках:
def first[T](elements: list[T]) -> T:
return elements[0]
В предыдущих версиях для этой цели использовался TypeVar:
from typing import TypeVar
T = TypeVar("T")
def first(elements: list[T]) -> T:
return elements[0]
Все остальное в этой статье есть.
Из новых возможностей мне больше всего нравится возможность использовать один и тот же тип кавычек снаружи и внутри f-строк и декоратор @override.
Пожалуй, это стоит того, чтобы перейти на 3.12.
Кто перешел уже? Как вам?
#python
Medium
5 Handy Python 3.12 New Features That Improve Your Coding Experience
Elegance in the details
Утро начинается не с кофе, а с погружения в метаклассы. Не спрашивайте, зачем )
На деле не так страшен черт оказался, как это часто бывает. В двух словах опишу концепцию для тех, кому интересно.
Метаклассы в питоне - это объекты, которые создают классы. Экземпляром метакласса является класс.
Самым базовым метаклассом является type. Он используется при создании классов по умолчанию и чаще всего всех устраивает.
(То есть когда мы описываем класс с помощью ключевого слова class или функции type, мы создаем его с помощью метакласса type.
В тот момент, когда интерпретатор питона натыкается на определение класса в питоне, он начинает вызывать методы метакласса type, отвечающие за создание класса)
Иногда может возникнуть желание добавить какую-нибудь дополнительную логику при создании класса. Например, мы можем захотеть при создании классов каким-то специальным образом декорировать все их методы, или динамически добавлять ко всем классам некой группы какие-нибудь методы или атрибуты, или выполнять всевозможные проверки (например, можно проверять существование или отсутствие существования некого атрибута или метода в создаваемых классах).
Вот тогда у нас и появляется необходимость в метаклассах.
Чтобы создать новый метакласс, нужно унаследоваться от базового метакласса type.
Чаще всего имеет смысл переопределять методы new и call.
В new прописывается логика, связанная с созданием нового класса, а в call прописывается логика, связанная с созданием экземпляров класса, относящегося к описываемому метаклассу.
Нетрудно заметить сходство между call метакласса и new класса. Ведь в new класса мы тоже прописываем логику, связанную с созданием экземпляра.
Отличие здесь в том, что, во-первых, в call метакласса мы можем обработать экземпляр уже после вызова new и init соответствующего класса, в то время как в new класса мы описываем действия еще до инициализации класса.
Во-вторых, в new класса мы описываем действия, связанные с созданием экземпляра конкретного класса, в то время как в call метакласса мы работаем на уровне целого метакласса (следовательно, можем управлять созданием экземпляров объектов всех классов, использующих данный метакласс для своего создания).
Порядок вызова методов при создании класса такой:
- сначала вызывается new метакласса - здесь можем контролировать процесс создания класса;
- затем вызывается init метакласса - здесь можем инициализировать класс, добавив в него новые атрибуты.
А при создании экземпляра класса происходит следующее:
- сначала вызывается call метакласса - здесь можем контролировать процесс создания экземпляра класса, относящегося к данному метаклассу;
- затем вызывается new класса - здесь контролируем процесс создания экземпляра класса;
- затем вызывается init класса - здесь прописываем инициализацию экземпляров класса.
Вся эта информация может показаться излишне теоретизированной и ненужной, но на самом деле метаклассы встречаются в реальной жизни чаще, чем кажется: при определении моделей в Django, SQLAlchemy и т.д.
#python #metaclasses
На деле не так страшен черт оказался, как это часто бывает. В двух словах опишу концепцию для тех, кому интересно.
Метаклассы в питоне - это объекты, которые создают классы. Экземпляром метакласса является класс.
Самым базовым метаклассом является type. Он используется при создании классов по умолчанию и чаще всего всех устраивает.
(То есть когда мы описываем класс с помощью ключевого слова class или функции type, мы создаем его с помощью метакласса type.
В тот момент, когда интерпретатор питона натыкается на определение класса в питоне, он начинает вызывать методы метакласса type, отвечающие за создание класса)
Иногда может возникнуть желание добавить какую-нибудь дополнительную логику при создании класса. Например, мы можем захотеть при создании классов каким-то специальным образом декорировать все их методы, или динамически добавлять ко всем классам некой группы какие-нибудь методы или атрибуты, или выполнять всевозможные проверки (например, можно проверять существование или отсутствие существования некого атрибута или метода в создаваемых классах).
Вот тогда у нас и появляется необходимость в метаклассах.
Чтобы создать новый метакласс, нужно унаследоваться от базового метакласса type.
Чаще всего имеет смысл переопределять методы new и call.
В new прописывается логика, связанная с созданием нового класса, а в call прописывается логика, связанная с созданием экземпляров класса, относящегося к описываемому метаклассу.
Нетрудно заметить сходство между call метакласса и new класса. Ведь в new класса мы тоже прописываем логику, связанную с созданием экземпляра.
Отличие здесь в том, что, во-первых, в call метакласса мы можем обработать экземпляр уже после вызова new и init соответствующего класса, в то время как в new класса мы описываем действия еще до инициализации класса.
Во-вторых, в new класса мы описываем действия, связанные с созданием экземпляра конкретного класса, в то время как в call метакласса мы работаем на уровне целого метакласса (следовательно, можем управлять созданием экземпляров объектов всех классов, использующих данный метакласс для своего создания).
Порядок вызова методов при создании класса такой:
- сначала вызывается new метакласса - здесь можем контролировать процесс создания класса;
- затем вызывается init метакласса - здесь можем инициализировать класс, добавив в него новые атрибуты.
А при создании экземпляра класса происходит следующее:
- сначала вызывается call метакласса - здесь можем контролировать процесс создания экземпляра класса, относящегося к данному метаклассу;
- затем вызывается new класса - здесь контролируем процесс создания экземпляра класса;
- затем вызывается init класса - здесь прописываем инициализацию экземпляров класса.
Вся эта информация может показаться излишне теоретизированной и ненужной, но на самом деле метаклассы встречаются в реальной жизни чаще, чем кажется: при определении моделей в Django, SQLAlchemy и т.д.
#python #metaclasses
Открытие дня - пакет freezegun. Позволяет управлять временем!
Если декорировать функцию с помощью freeze_time("2023-12-31"), то она на протяжении всего времени своего выполнения будет думать, что на дворе Новый год.
Если использовать freeze_time() как контекстный менеджер, то с помощью возвращаемого этой функцией объекта можно крутить временем туда-сюда, используя метод move_to().
Почувствуй себя Доктором Стрэнджем!
Используется для тестов, разумеется.
Устанавливается через pip:
pip install freezegun
Ссылка на репозиторий вот: https://github.com/spulec/freezegun
#python
Если декорировать функцию с помощью freeze_time("2023-12-31"), то она на протяжении всего времени своего выполнения будет думать, что на дворе Новый год.
Если использовать freeze_time() как контекстный менеджер, то с помощью возвращаемого этой функцией объекта можно крутить временем туда-сюда, используя метод move_to().
Почувствуй себя Доктором Стрэнджем!
Используется для тестов, разумеется.
Устанавливается через pip:
pip install freezegun
Ссылка на репозиторий вот: https://github.com/spulec/freezegun
#python
Вчера состоялась очередная встреча белградских питонистов )
Из 8 потенциальных участников до старта доползло только пятеро, но этого было вполне достаточно для оживленной беседы под пивко.
Мы собирались в баре под названием "Docker". Я на всякий случай повторил, чем отличается CMD от ENTRYPOINT, но про Docker на входе никто не спрашивал. Если честно, я даже подозреваю, что не все вчерашние посетители были разработчиками.
18 видов пива (ипы, не-ипы, двойные-ипы, милкшейк-ипы, лагеры, стауты и т.д.) и вкусные (на вид) крылья с бургерами.
Для меня есть еще как минимум 17 причин вернуться туда снова )
При обсуждении метаклассов было жарко, конечно, но в целом все прошло тихо, мирно, никто никого не побил, так что будем продолжать собираться снова )
#python #belgrade
Из 8 потенциальных участников до старта доползло только пятеро, но этого было вполне достаточно для оживленной беседы под пивко.
Мы собирались в баре под названием "Docker". Я на всякий случай повторил, чем отличается CMD от ENTRYPOINT, но про Docker на входе никто не спрашивал. Если честно, я даже подозреваю, что не все вчерашние посетители были разработчиками.
18 видов пива (ипы, не-ипы, двойные-ипы, милкшейк-ипы, лагеры, стауты и т.д.) и вкусные (на вид) крылья с бургерами.
Для меня есть еще как минимум 17 причин вернуться туда снова )
При обсуждении метаклассов было жарко, конечно, но в целом все прошло тихо, мирно, никто никого не побил, так что будем продолжать собираться снова )
#python #belgrade
Поковырявшись в списке лучших альбомов 2023-го года по версии журнала Rolling Stone, среди всякого рэпа, попа и кантри удалось отыскать настоящую жемчужину по имени Mitski.
Стоит вашего внимания, мне кажется:
https://youtu.be/9azlH95iSWg?si=kpp2BpOxEwwy14zH
#музыка
Стоит вашего внимания, мне кажется:
https://youtu.be/9azlH95iSWg?si=kpp2BpOxEwwy14zH
#музыка
YouTube
Mitski — My Love Mine All Mine | LIVE Performance | SiriusXM
Mitski performs "My Love Mine All Mine" live on SiriusXM.
#SiriusXM #Mitski
Hear more from SiriusXM on our app! Click here for your trial subscription: https://siriusxm.com/yt/freetrial
Subscribe to the SiriusXM YouTube channel: https://www.youtube.com/c/siriusxm…
#SiriusXM #Mitski
Hear more from SiriusXM on our app! Click here for your trial subscription: https://siriusxm.com/yt/freetrial
Subscribe to the SiriusXM YouTube channel: https://www.youtube.com/c/siriusxm…
THE POOR THINGS
Решил попробовать посмотреть в оригинале вместо мультяшек кино для взрослых людей. Это оказалось предсказуемо сложней - встретилось намного больше незнакомых слов и фраз. Но с другой стороны фразы эти кажутся более практичными и применимыми в реальной жизни.
Сами посудите:
leap off the bridge - прыжок с моста
rigor - трупное окоченение
weak bladder - слабый мочевой пузырь
oysters - устрицы
carriage - карета
incision - надрез
cadaver - труп
moron - идиот, дебил
to whore oneself - продаться, начать заниматься проституцией
to take an advantage of smb - воспользоваться кем-либо
fornication - блуд, внебрачная связь
mortar - миномет
Ну и много-много других. Добавлю в Quizlet и буду учить теперь, чтобы оправдать затраченное на фильм время (а это часа 4 минимум).
Знали бы вы, сколько раз я получил от ChatGPT предупреждения о возможных нарушениях правил его использования, пока переводил этот фильм )
Иногда он думал, что я его просто оскорбляю ) Говорил мне, вы либо по делу пишите, либо не пишите ничего тогда.
А фильм классный, кстати. Мне было дико интересно даже несмотря на то, что еще полгода назад я прочитал весь его сюжет на Википедии.
P.S. Добавил слова в Quizlet: https://quizlet.com/926031021/the-poor-things-flash-cards/?i=514d7n&x=1jqt
#кино #английский
Решил попробовать посмотреть в оригинале вместо мультяшек кино для взрослых людей. Это оказалось предсказуемо сложней - встретилось намного больше незнакомых слов и фраз. Но с другой стороны фразы эти кажутся более практичными и применимыми в реальной жизни.
Сами посудите:
leap off the bridge - прыжок с моста
rigor - трупное окоченение
weak bladder - слабый мочевой пузырь
oysters - устрицы
carriage - карета
incision - надрез
cadaver - труп
moron - идиот, дебил
to whore oneself - продаться, начать заниматься проституцией
to take an advantage of smb - воспользоваться кем-либо
fornication - блуд, внебрачная связь
mortar - миномет
Ну и много-много других. Добавлю в Quizlet и буду учить теперь, чтобы оправдать затраченное на фильм время (а это часа 4 минимум).
Знали бы вы, сколько раз я получил от ChatGPT предупреждения о возможных нарушениях правил его использования, пока переводил этот фильм )
Иногда он думал, что я его просто оскорбляю ) Говорил мне, вы либо по делу пишите, либо не пишите ничего тогда.
А фильм классный, кстати. Мне было дико интересно даже несмотря на то, что еще полгода назад я прочитал весь его сюжет на Википедии.
P.S. Добавил слова в Quizlet: https://quizlet.com/926031021/the-poor-things-flash-cards/?i=514d7n&x=1jqt
#кино #английский
Если вы меня спросите о любимых цитатах из фильмов (ума не приложу, для чего вам это у меня спрашивать), то немного поразмыслив, я бы привел что-нибудь высокопарное из Бэтменов Нолана.
Например, мне очень нравится фраза, которую произносит Рэйчел Доуз Брюсу Уэйну в "Бэтмен. Начало":
"В глубине души ты можешь быть очень хорошим человеком, но о человеке судят по его поступкам".
В оригинале еще круче: "It's not who you are underneath. It's what you do that defines you".
Или, например, фраза Джокера из "Темного Рыцаря": "Я словно пес, бегущий за автомобилем! Я бы не знал, что делать, если бы его догнал. Я просто делаю - и все".
В оригинале: "I’m like a dog chasing cars. I wouldn’t know what to do with one if I caught it. I just do things."
Но среди всех киноцитат есть две, которые занимают в моей жизни особенное место. Это фразы, для которых находится удивительно много поводов, чтобы подумать их или произнести. Вот они:
1) "Я хотя бы попытался" ("At least I tried"). Произносит герой Джека Николсона в "Пролетая над Гнездом Кукушки" после попытки оторвать от пола гидромассажную установку, чтобы разбить ей окно и сбежать.
2) "Как мог я сомневаться?" ("And to think I hesitated?"). Произносит Доктор Чаннард в "Восставшем из Ада 2" после превращения в главгада этого фильма.
Как у вас с этим дела? Можете припомнить какие-нибудь запоминающиеся фразы из фильмов, который сопровождают вас по жизни?
#мысливслух
Например, мне очень нравится фраза, которую произносит Рэйчел Доуз Брюсу Уэйну в "Бэтмен. Начало":
"В глубине души ты можешь быть очень хорошим человеком, но о человеке судят по его поступкам".
В оригинале еще круче: "It's not who you are underneath. It's what you do that defines you".
Или, например, фраза Джокера из "Темного Рыцаря": "Я словно пес, бегущий за автомобилем! Я бы не знал, что делать, если бы его догнал. Я просто делаю - и все".
В оригинале: "I’m like a dog chasing cars. I wouldn’t know what to do with one if I caught it. I just do things."
Но среди всех киноцитат есть две, которые занимают в моей жизни особенное место. Это фразы, для которых находится удивительно много поводов, чтобы подумать их или произнести. Вот они:
1) "Я хотя бы попытался" ("At least I tried"). Произносит герой Джека Николсона в "Пролетая над Гнездом Кукушки" после попытки оторвать от пола гидромассажную установку, чтобы разбить ей окно и сбежать.
2) "Как мог я сомневаться?" ("And to think I hesitated?"). Произносит Доктор Чаннард в "Восставшем из Ада 2" после превращения в главгада этого фильма.
Как у вас с этим дела? Можете припомнить какие-нибудь запоминающиеся фразы из фильмов, который сопровождают вас по жизни?
#мысливслух
Вписался в челлендж по расширению словарного запаса от English with Lucy. Примеры там огонь, конечно )
Ссылка на челлендж: https://challenge.englishwithlucy.com/vc-ct
#english
Ссылка на челлендж: https://challenge.englishwithlucy.com/vc-ct
#english
Уже много раз решал задачу "Ransom Note" на Leetcode, и только сегодня удосужился перевести слово "ransom".
Ransom - это выкуп )
По условию задачи мы составляем записку с требованием выкупа, используя буквы из журнала, чтобы нельзя было узнать наш почерк )
Наша функция должна определить, сможет ли конкретный журнал обеспечить все наши потребности в буквах для составления записки.
Перед этим мы, видимо, похитили чью-то дочь или любимую собаку.
https://leetcode.com/problems/ransom-note/description/
#leetcode
Ransom - это выкуп )
По условию задачи мы составляем записку с требованием выкупа, используя буквы из журнала, чтобы нельзя было узнать наш почерк )
Наша функция должна определить, сможет ли конкретный журнал обеспечить все наши потребности в буквах для составления записки.
Перед этим мы, видимо, похитили чью-то дочь или любимую собаку.
https://leetcode.com/problems/ransom-note/description/
#leetcode
LeetCode
Ransom Note - LeetCode
Can you solve this real interview question? Ransom Note - Given two strings ransomNote and magazine, return true if ransomNote can be constructed by using the letters from magazine and false otherwise.
Each letter in magazine can only be used once in ransomNote.…
Each letter in magazine can only be used once in ransomNote.…