Бывший 1Сник (канал)
3.83K subscribers
562 photos
12 videos
362 links
Автор видео на ютуб-канале "Бывший 1Сник" (мир его праху). Пишу здесь все подряд.
Download Telegram
На текущий момент это самая крутая статья про возможности Python 3.12, которая мне попадалась:

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
Исторический прикид 6-летней давности )
Утро начинается не с кофе, а с погружения в метаклассы. Не спрашивайте, зачем )

На деле не так страшен черт оказался, как это часто бывает. В двух словах опишу концепцию для тех, кому интересно.

Метаклассы в питоне - это объекты, которые создают классы. Экземпляром метакласса является класс.
Самым базовым метаклассом является 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
На случай, если вы думаете, что история с ремонтом клавы закончилась )

Нет, друзья... Сегодня в шестой раз в сервис пойду )
This media is not supported in your browser
VIEW IN TELEGRAM
Танцуй, как будто никто не видит )

Из воспоминаний фэйсбука 6-летней давности.

#воспоминания
Открытие дня - пакет freezegun. Позволяет управлять временем!

Если декорировать функцию с помощью 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
Поковырявшись в списке лучших альбомов 2023-го года по версии журнала Rolling Stone, среди всякого рэпа, попа и кантри удалось отыскать настоящую жемчужину по имени Mitski.

Стоит вашего внимания, мне кажется:
https://youtu.be/9azlH95iSWg?si=kpp2BpOxEwwy14zH

#музыка
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

#кино #английский
Странный разговор сегодня состоялся 😁
На вчерашнюю сходку белградских питонистов народу пришло целый легион. Есть даже предположение, что это были вообще все питонисты Белграда.

#python #belgrade
Решил попробовать другой сервис.

Теперь у меня две сломанных кнопки 😁
Если вы меня спросите о любимых цитатах из фильмов (ума не приложу, для чего вам это у меня спрашивать), то немного поразмыслив, я бы привел что-нибудь высокопарное из Бэтменов Нолана.

Например, мне очень нравится фраза, которую произносит Рэйчел Доуз Брюсу Уэйну в "Бэтмен. Начало":
"В глубине души ты можешь быть очень хорошим человеком, но о человеке судят по его поступкам".
В оригинале еще круче: "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
Уже много раз решал задачу "Ransom Note" на Leetcode, и только сегодня удосужился перевести слово "ransom".

Ransom - это выкуп )

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

Перед этим мы, видимо, похитили чью-то дочь или любимую собаку.

https://leetcode.com/problems/ransom-note/description/

#leetcode
Ступил на бронзовый путь при решении задач на chess.com (деревянный и каменный пути за спиной).

Легенда гласит, что после прохождения золотого пути мне будет присвоено звание "маэстро".

Собственно, в этом и есть моя основная мотивация ) Маэстро Леонтьев буду!

#шахматы
Короче, начинающие боты на chess.com играть не умеют.
Теперь посмотрим, как дела у ботов среднего уровня обстоят.

#шахматы