Типизация опциональности в питоне.
Этот спор древен примерно также как и вопрос: -табы или пробелы? Однажды из-за этого я умудрился даже с коллегами поругаться, поэтому давайте разберёмся из-за чего бывают конфликты у задротов 🤔
Суть в следующем: допустим у нас есть произвольный тип T, но мы хотим задать такой тайпхинт, чтобы иметь возможность оставить переменную с типом Т неопределенной. Как мы это сделаем?
Существует 3 решения:
Далее подробнее про каждый из вариантов.
Вариант A:
Самый простой и некоторые линтеры вполне корректно его обработают, подменив на вариант B, но заточенные на типизацию вроде mypy и pyright дадут вам смачного леща, потому что ну а какого хрена вы присвоили неверный тип, а??
Вариант B:
Самый распространенный вариант и куда лучше чем A, но идейно неверный. Представьте следующее выражение:
На уровне логики аргумент b является опциональным, но в то же время, если мы его не передадим в функцию, то программа упадет с ошибкой, т к фактически на уровне кода b является обязательным. Какая-то суперпозиция получается 🤔 Дело в том, что на самом деле понятия опционального аргумента и аргумента, способного принимать None - это совершенно разные и не связанные понятия, которые ошибочно были склеины в классе Optional. В помойку его!
Вариант C:
Фактически это аналог записи вида
Давайте рассмотрим способы возможного применения последнего варианта в разрезе опциональности. Допустим у нас есть класс пользователя:
Из записи атрибутов следует следующая логика:
* id - атрибут типа int, который должен быть обязательно указан.
* name - атрибут, который может быть как str, так и None, но должен быть обязательно указан.
* last_name - атрибут, который может быть как str, так и None, но является опциональным т к он уже имеет дефолтное значение.
Хинт: для того чтоб быстро зарефачить проект с варианта B на вариант C можно воспользоваться утилитой no-optional.
Установка:
Рефакторинг одного файла:
А следующей командой можно отредактировать весь проект целиком:
#dev
Этот спор древен примерно также как и вопрос: -табы или пробелы? Однажды из-за этого я умудрился даже с коллегами поругаться, поэтому давайте разберёмся из-за чего бывают конфликты у задротов 🤔
Суть в следующем: допустим у нас есть произвольный тип T, но мы хотим задать такой тайпхинт, чтобы иметь возможность оставить переменную с типом Т неопределенной. Как мы это сделаем?
Существует 3 решения:
a: T = None
b: Optional[T] = None
c: Union[T, None] = NoneДалее подробнее про каждый из вариантов.
Вариант A:
Самый простой и некоторые линтеры вполне корректно его обработают, подменив на вариант B, но заточенные на типизацию вроде mypy и pyright дадут вам смачного леща, потому что ну а какого хрена вы присвоили неверный тип, а??
Вариант B:
Самый распространенный вариант и куда лучше чем A, но идейно неверный. Представьте следующее выражение:
def f(b: Optional[T]): passНа уровне логики аргумент b является опциональным, но в то же время, если мы его не передадим в функцию, то программа упадет с ошибкой, т к фактически на уровне кода b является обязательным. Какая-то суперпозиция получается 🤔 Дело в том, что на самом деле понятия опционального аргумента и аргумента, способного принимать None - это совершенно разные и не связанные понятия, которые ошибочно были склеины в классе Optional. В помойку его!
Вариант C:
Фактически это аналог записи вида
c: T | None появившейся с версии 3.10, но если вы используете версию младше или пишете обратносовместимый код, то это тот самый вариант, который верен и на уровне логики и на уровне кода. Его я и считаю правильным использовать.Давайте рассмотрим способы возможного применения последнего варианта в разрезе опциональности. Допустим у нас есть класс пользователя:
class User:
id: int
name: Union[str, None]
last_name: Union[str, None] = NoneИз записи атрибутов следует следующая логика:
* id - атрибут типа int, который должен быть обязательно указан.
* name - атрибут, который может быть как str, так и None, но должен быть обязательно указан.
* last_name - атрибут, который может быть как str, так и None, но является опциональным т к он уже имеет дефолтное значение.
Хинт: для того чтоб быстро зарефачить проект с варианта B на вариант C можно воспользоваться утилитой no-optional.
Установка:
pip install no-optionalРефакторинг одного файла:
no_optional <filename>А следующей командой можно отредактировать весь проект целиком:
find <project_folder> -iname "*.py" | xargs python -m no_optional#dev
👍6🔥2❤1
Знаете, у Казахстана просто огромный потенциал. Казахстан - страна будущего. Да и вообще, быть может я в душе казах? Короче, я уезжаю жить в Казахстан!
🤩6👍5🤔1
Вот бы подготовил меня кто в детстве к тому, что выгорать я буду вовсе не от кучи работы или сложных проектов, а от ебучих новостей. Извините, господа, что редко пишу. Однажды, как у меня станет меньше головной боли, то я буду писать интересные вещи порегулярнее ❤️
❤20👍1🙏1
Alinsky.tech
[1] Модуль разметки для Telegram. Сначала на этих выходных я хотел быстренько написать программу, которая обновляла бы меню в закрепе, поскольку оказалось, что мне это сделать больше одного раза лень. Для этого была нужна какая-нибудь утилита, которая позволяла…
Помните я писал про модуль telegram-text? Недавно он был добавлен в оф доку телеграмма 🎉 А также теперь он интегрирован в несколько фреймворков и в несколько всё ещё в процессе ^_^ #tech
🎉15🤩4🔥3
В Казахстане с 27 января ужесточают миграционную политику.
Раньше сюда можно было приехать на 90 дней, и по истечению этого срока уехать, и снова сразу же въехать вновь на 90 дней, и так сколько угодно. Так называемый визаран.
Теперь же в Казахстане можно прибывать только 90 дней раз в 180 дней, что делает его неподходящим вариантом для долговременного прибывания, но лишь на первый взгляд.
Так как в этом канале есть достаточное количество людей, бежавших в Казахстан от войны, пишу инструкцию как тут находиться сколько угодно даже в текущей ситуации.
В Казахстане есть так называемое РВП - разрешение на временное проживание. Этот документ не так крут как ВНЖ, но его невероятно просто и быстро можно получить. Самое главное что даёт РВП - это возможность прибывать в Казахстане в течении года + возможность продлевать его бесчисленное количество раз. Проще всего его получить устроившись на работу фиктивно. Для этого есть 2 варианта:
1. Открыть ИП и оформить самого себя как сотрудника в этом ИП.
2. Устроиться в чужую компанию существующую только на бумаге.
Для того чтобы это провернуть вам не нужно знать юридические особенности и париться с документами, тут очень распространена услуга оформления всего этого под ключ, стоит лишь немного погуглить;)
Средняя цена вопроса по схеме 1 - примерно 150к тенге (22к рублей).
Средняя цена вопроса по схеме 2 - примерно 250к тенге (37к рублей).
Просто введите в гугле "
Также стоит сказать, что если у вас нет удаленной работы и вы бы действительно хотели тут работать face-to-face, то вам поможет получить такой документ ваш работодатель.
Поделитесь этой информацией с вашими знакомыми, которые уехали в Казахстан и не знают что им сейчас делать 🙏🏻 #relocation
Раньше сюда можно было приехать на 90 дней, и по истечению этого срока уехать, и снова сразу же въехать вновь на 90 дней, и так сколько угодно. Так называемый визаран.
Теперь же в Казахстане можно прибывать только 90 дней раз в 180 дней, что делает его неподходящим вариантом для долговременного прибывания, но лишь на первый взгляд.
Так как в этом канале есть достаточное количество людей, бежавших в Казахстан от войны, пишу инструкцию как тут находиться сколько угодно даже в текущей ситуации.
В Казахстане есть так называемое РВП - разрешение на временное проживание. Этот документ не так крут как ВНЖ, но его невероятно просто и быстро можно получить. Самое главное что даёт РВП - это возможность прибывать в Казахстане в течении года + возможность продлевать его бесчисленное количество раз. Проще всего его получить устроившись на работу фиктивно. Для этого есть 2 варианта:
1. Открыть ИП и оформить самого себя как сотрудника в этом ИП.
2. Устроиться в чужую компанию существующую только на бумаге.
Для того чтобы это провернуть вам не нужно знать юридические особенности и париться с документами, тут очень распространена услуга оформления всего этого под ключ, стоит лишь немного погуглить;)
Средняя цена вопроса по схеме 1 - примерно 150к тенге (22к рублей).
Средняя цена вопроса по схеме 2 - примерно 250к тенге (37к рублей).
Просто введите в гугле "
Купить РВП в Казахстане" и изучите несколько первых ссылок.Также стоит сказать, что если у вас нет удаленной работы и вы бы действительно хотели тут работать face-to-face, то вам поможет получить такой документ ваш работодатель.
Поделитесь этой информацией с вашими знакомыми, которые уехали в Казахстан и не знают что им сейчас делать 🙏🏻 #relocation
🕊5❤1
Недавно наткнулся на годный набор видео с прикольными визуализациями о хороших практиках в программировании, которые часто игнорируют даже опытные разрабы. Видео на английском, но если вдруг что, то там есть субтитры. Вот этот набор:
* Правильное использование абстракций
* Минусы наследования
* Вложенность - жопа
* Хороший нейминг
* Комменты - в мусор
Вообще все эти видео с одного канала и я надеюсь парниша не забросит его. #dev
* Правильное использование абстракций
* Минусы наследования
* Вложенность - жопа
* Хороший нейминг
* Комменты - в мусор
Вообще все эти видео с одного канала и я надеюсь парниша не забросит его. #dev
👍5❤2🔥1
[1/4] Долгожданный (в любом случае лично для меня) пост про фреймворк Regta. Вчера я опубликовал финализирующий релиз этой технологии и это её обзор.
Regta - это программный планировщик задач, оптимизированый специально для Python и спроектированный непосредственно для использования в продакшене. Кстати, во многом благодаря нему топ постов в меню в закрепе регулярно обновляется. Давайте начнем с бенефитов, которые он дает.
1. Поддержка асинхронности, многопоточности и многопроцессности. Это позволяет более эффективно использовать ресурсы сервера. В случае, например, с такими планировщиками как Cron, сервер очень быстро просядет в связи с тем, что Cron запускает каждую задачу в отдельном дорогостоящем процессе, в то время как Regta дает возможность запустить легковесную корутину или поток под задачу.
2. Regta учитывает время, затраченное на выполнение задач и потерянное при перезагрузке сервера без внешних систем и хранения кеша, что позволяет всегда иметь миллисекундную точность при выполнении задач. Если задача должна быть выполнена в 21:00 по Москве, значит она будет выполнена ровно в 21:00 по Москве что бы не произошло. Ну, если не отрубить питание, конечно, но вот перебои обработает корректно.
3. Секси ANSI подсветка. Если у современной консольной утилиты нет читабельной подсветки логов, то она не может считаться современной 🏳️🌈
На этом пока остановлюсь чтоб не сильно затягивать пост. Про остальные бенефиты вроде локализации, логирования и мультипарадигменности можно прочитать в доке regta.alinsky.tech #tech
Regta - это программный планировщик задач, оптимизированый специально для Python и спроектированный непосредственно для использования в продакшене. Кстати, во многом благодаря нему топ постов в меню в закрепе регулярно обновляется. Давайте начнем с бенефитов, которые он дает.
1. Поддержка асинхронности, многопоточности и многопроцессности. Это позволяет более эффективно использовать ресурсы сервера. В случае, например, с такими планировщиками как Cron, сервер очень быстро просядет в связи с тем, что Cron запускает каждую задачу в отдельном дорогостоящем процессе, в то время как Regta дает возможность запустить легковесную корутину или поток под задачу.
2. Regta учитывает время, затраченное на выполнение задач и потерянное при перезагрузке сервера без внешних систем и хранения кеша, что позволяет всегда иметь миллисекундную точность при выполнении задач. Если задача должна быть выполнена в 21:00 по Москве, значит она будет выполнена ровно в 21:00 по Москве что бы не произошло. Ну, если не отрубить питание, конечно, но вот перебои обработает корректно.
3. Секси ANSI подсветка. Если у современной консольной утилиты нет читабельной подсветки логов, то она не может считаться современной 🏳️🌈
На этом пока остановлюсь чтоб не сильно затягивать пост. Про остальные бенефиты вроде локализации, логирования и мультипарадигменности можно прочитать в доке regta.alinsky.tech #tech
🎉4❤3
Alinsky.tech
Забавная особенность - в этот модуль я заложил 2 способа инициализации: хипстерский и олдскульный. Какой вам нравится больше?:) #tech
[2/4] Далее кратко на практике. Давайте напишем максимально простую задачу, которая будет просто писать в лог сообщение раз в 3 минуты. Пример кода для этого можно посмотреть на картинке. Достаточно всего-то импортировать декоратор
async_job и указать интервал в формате Period, о котором я уже писал в отдельном посте, или просто в timedelta #tech👏2👍1
[4/4] А вот сравнение возможностей Regta с популярными альтернативами. По почти всем показателям она выигрывает среди аналогов. Полную статью со сравнением можно прочитать по ссылке regta.alinsky.tech/alternatives
Резюмируя сравнение, если перед вами стоит задача регулярного выполнения задач на Python в целях внутренней автоматизации, то Regta будет для вас наилучшим вариантом. Если же вам нужно выполнять миллионы задач с динамическим расписанием, например, рассылать отложенные сообщения как в телеге, то используйте для этого Celery, во всех же остальных случаях можно смело дрочить на Regta. #tech
Звездочки можно ставить туда github.com/SKY-ALIN/regta ⭐ 🙃
Резюмируя сравнение, если перед вами стоит задача регулярного выполнения задач на Python в целях внутренней автоматизации, то Regta будет для вас наилучшим вариантом. Если же вам нужно выполнять миллионы задач с динамическим расписанием, например, рассылать отложенные сообщения как в телеге, то используйте для этого Celery, во всех же остальных случаях можно смело дрочить на Regta. #tech
Звездочки можно ставить туда github.com/SKY-ALIN/regta ⭐ 🙃
🤩6🔥1🤔1🫡1
Наконец-то я нашел аниме-персонажа с которым я могу себя ассоциировать на все 100%
Лучшее аниме 2022 на мой взгляд. Лично мне зашло даже больше киберпанка (づ ᴗ _ᴗ)づ♡
Лучшее аниме 2022 на мой взгляд. Лично мне зашло даже больше киберпанка (づ ᴗ _ᴗ)づ♡
🤩5👍3❤1🙏1
Сорян что не писал, меня санитары только сейчас начали иногда развязывать.
За последние 2.5 года я объездил пол мира, получил новое гражданство, сменил имя и фамилию, прошел путь до руководителя разработки, открыл еще один бизнес и успешно его развалил, несколько раз становился миллионером и столько же раз терял все в 0 и был в долгах, меня искали менты за дискредитацию и вообще я в лужу падал. Много всего произошло о чем я еще долго не смогу рассказать и мне нужно было многое переосмыслить, включая этот канал. Я его создал в конце 2021 под давлением друзей которые хотели чтобы я делился своими «знаниями» и «учил», но на самом деле это совсем не то что мне тогда было нужно. Однако, я подумываю сюда вернуться, но в основном вместо всяких гайдов, обзоров стран и новостей из моей жизни вы тут увидите тупые мемчики, а у меня за это время скопилась целая коллекция!! Ну и конечно, никаких гарантий, что через какое то время я не возьму новый перерыв от социума^
За это время канал похудел более чем в 2 раза, но часть осталась! Скорее всего просто потому что он скатился глубоко вниз в чатах и об этом месте все забыли, но все же! Всех цмок в пупок ^-^
За последние 2.5 года я объездил пол мира, получил новое гражданство, сменил имя и фамилию, прошел путь до руководителя разработки, открыл еще один бизнес и успешно его развалил, несколько раз становился миллионером и столько же раз терял все в 0 и был в долгах, меня искали менты за дискредитацию и вообще я в лужу падал. Много всего произошло о чем я еще долго не смогу рассказать и мне нужно было многое переосмыслить, включая этот канал. Я его создал в конце 2021 под давлением друзей которые хотели чтобы я делился своими «знаниями» и «учил», но на самом деле это совсем не то что мне тогда было нужно. Однако, я подумываю сюда вернуться, но в основном вместо всяких гайдов, обзоров стран и новостей из моей жизни вы тут увидите тупые мемчики, а у меня за это время скопилась целая коллекция!! Ну и конечно, никаких гарантий, что через какое то время я не возьму новый перерыв от социума^
За это время канал похудел более чем в 2 раза, но часть осталась! Скорее всего просто потому что он скатился глубоко вниз в чатах и об этом месте все забыли, но все же! Всех цмок в пупок ^-^
3 7 7 6 4 1
Я ни за чьи отношения так не переживал, как за этих двоих. Кенье вообще ребёнок в разводе 😭
1 6 2 2🗿1 1 1 1
-Нет паранойи из-за того что камера не заклеена?
-Бро, это линукс, камера не работает
-Бро, это линукс, камера не работает
1 6 3 2 2 1
Ну, понеслась. У нас началась еще одна война… 🇮🇱
Please open Telegram to view this post
VIEW IN TELEGRAM
1 8 5 3🗿1