Telegram Web Link
Работаем со временем без головной боли

При работе со временем и датами у встроенных модулей есть несколько неприятных моментов:

— Их слишком много: datetime, time, calendar, dateutil, pytz и другие;
— В них слишком много типов: date, time, datetime, tzinfo, timedelta, relativedelta и т. д.

И вот на днях я наткнулся на пакет arrow, который их решает. Во-первых, там есть все необходимое. Во-вторых, все объекты имеют один и тот же тип Arrow.

Большой плюс в том, что пакет совместим с основными встроенными типами. Например, выше я преобразовал datetime в Arrow и обратно.

Еще из приятных бонусов: там есть функция humanize, которая конвертирует время в читаемый текст.

#время #arrow
Присоединяйтесь к Людям Cloud!

Cloud — первый облачный провайдер, запустивший суперкомпьютер для широкого рынка. Выступаем технологическим лидером и двигаем отрасль вперед. Мы обладаем экспертизой и мощными компетенциями как в классических облачных решениях, так и в инновационных областях AI и ML.

Мы создали сообщество, чтобы делиться знаниями и опытом, узнавать новое, развиваться и общаться.

Люди Cloud — молодые, умные, амбициозные и уверенные в себе. Мы не боимся начинать, открывать новые пути и быть первыми. Мы любим технологии и хотим быть сопричастными их развитию.

У нас вы найдете:

вакансии Cloud раньше, чем в остальных каналах;
быструю обратную связь по резюме;
советы по карьерному развитию;
встречи с экспертами Cloud;
истории успеха в Cloud;
тренды IT-отрасли;
нетворкинг.

Станьте участником сообщества: https://www.tg-me.com/+yKf9Duv_8rgyMTdi
Аргументы и параметры командной строки

Для обработки передаваемых аргументов и создания удобный интерфейс командной строки в python есть отличный модуль argparse.

Для начала нам нужно создать объект парсера ArgumentParser, в который мы уже сможем добавить аргументы с нужными параметрами с помощью метода add_argument.

Первым параметром add_argument принимает либо имя обязательного позиционного аргумента, либо список опционального аргумента (опциональный аргумент идентифицируется через -). Также у add_argument есть множество необязательных опциональных параметров для работы с передаваемым значением аргумента, о них можете почитать в данной статье.

После добавления всех аргументов, нам нужно их спарсить с помощью метода parse_args, на выходе мы получим объект со всеми содержащимися аргументами.

#argparse
Методы у словарей

В этом посте поговорим про 3 простых метода у словарей, которые позволяет получить элементы в разном виде.

С помощью метода dict.keys() можно получить ключи словаря в виде списка, dict.values() — то же самое, но со значениями.

А метод dict.items() возвращает список из кортежей, которые содержат ключи и соответствующие значения.

#словари
3 интересных функции в random

Этот пост более для тех, у кого есть соответствующий бэкграунд и кто хочет знать про random больше среднего.

betavariate() — используется для получения случайного числа с плавающей запятой от 0 до 1 на основе бета-распределения (применяется для статистических расчетов).

gauss() — генерирует случайное число с плавающей запятой на основе распределения Гаусса (используется в теории вероятности).

paretovariate() — возвращает случайное число с плавающей запятой на основе распределения Парето (используется в теории вероятности).

Кстати, можете посмотреть на графиках результаты вызова этих функций по 100к раз тут, тут и тут.

#random
Создаем бесконечный итератор

Функция cycle() из itertools принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта.

Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элемента.

Но если вы проходитесь циклом по такому итератору, то важно предусмотреть выход из цикла, иначе он станет бесконечным (как у нас в первом случае на картинке).

Мы также можем воспользоваться islice(), который вернет итератор по подмножеству переданного объекта.

#itertools
Получаем список переменных

Функция locals() возвращает словарь переменных из текущего пространства имён. Ключи словаря — названия переменных, а значения — это их значения.

С помощью похожей функции globals() можно получить все переменные конкретного модуля в таком же виде.

Еще обратите внимание на результат второй функции: там много разных переменных, которые мы явно не объявляли — про некоторые из них скоро расскажем.

#переменные
Специальная переменная __name__

Когда интерпретатор Python читает файл, то сначала он устанавливает несколько специальных переменных (пример). Одной из таких переменных является __name__.

Если скрипт был запущен напрямую, то в переменную присваивается значение __main__, в случае импорта — название модуля.

Типичный пример использования такой переменной — создание точки входа в программу. Про это уже был ранее пост.

Вообще атрибут __name__ по умолчанию также ставится всем классам и функциям.

#переменные
Копируем объекты

При присваивании переменной значения другой переменной, как правило, новый объект не создается, а копируется ссылка уже на существующий.

Если использовать функцию copy из стандартной библиотеки, то новый объект будет создан, но его ссылки на другие объекты останутся такими же.

В случае с deepcopy произойдет рекурсивное копирование. Например, при таком копировании списка все его элементы также скопируются как новые объекты.

#copy
Валидаторы данных

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

Модуль validators позволяет использовать уже готовые валидаторы для самых распространенных задач. В примере можете как раз увидеть валидацию почты и ссылок.

Помимо этого, validators позволяет также работать с ipv4, ipv6, mac адресами и многим другим. В итоге, имеем лаконичный и простой модуль с хорошим функционалом.

#validators
Интересная пасхалка

Модуль __future__ позволяет подключать функционал из будущих версий языка. Например, можно попробовать импортировать фигурные скобки как в си-подобных языках.

Но будет вызвано исключение, которое говорит "not a chance", что означает "ни единого шанса". Однако есть ещё один интересный момент, а именно — исходный код этого модуля.

Оказывается, интерпретатор CPython сначала запускает файл future.c, когда встречается импорт этого модуля. А само это исключение реализовано на этой строчке.

#пасхалки
Метод join у строк

У строк есть полезный метод str.join(), который принимает на вход итерируемый объект, элементами которого также должны быть строки.

Как результат получаем новую строку, которая является объединением всех элементов. При этом они разделены строкой, к которой изначально применялся метод.

Проще говоря, если применить к строке этот метод, то она станет разделителем для элементов в новой строке.

#строки
Импорт антигравитации

Достаточно старая, но все же интересная пасхалка: если в коде прописать import antigravity, то при запуске скрипта откроется страница в браузере, которая содержит шутку про то, насколько же всё-таки язык простой.

#пасхалки
Проверка отношения классов

Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции isinstance(object, classinfo) и issubclass(class, classinfo).

instance - возвращает True, если объект является экземпляром класса либо экземпляром подкласса данного класса.
issubclass — проверяет является ли класс наследником другого класса.

Данные функции зачастую применяются в ООП.

#isinstance #issubclass
Делаем планировщик задач 

К моему удивлению, далеко не все знают про пакет schedule, который позволяет планировать задачи и повторять их через промежуток времени. 

Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще schedule не требует внешних зависимостей и сам в целом легковесный. 

Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах. 

#schedule
БЕСПЛАТНОЕ обучение по ТОП IT-профессиям, получи до +8 баллов к ЕГЭ

Бесплатно учиться — clck.ru/33PaBD

Томский государственный университет и проект «Код будущего» проводят бесплатное обучение по программированию для учеников 8-11 классов.

Прямо сейчас в группе проекта проводится розыгрыш iPad и MacBook, шанс на победу есть у каждого, подробности: vk.com/tgu_itschool?w=wall-217082021_761 🎁

Почему подростку стоит изучать программирование в проекте «Код будущего»:

— Возможность получить до +8 дополнительных баллов при поступлении;
— Обучение профессиям проходит по самым востребованным направлениям: Python, Java, Web, Mobile и Game Dev, Data Analytics, AI;
— Только практика и сильные проекты в портфолио;
— Большое комьюнити талантливых единомышленников;
— Стартовая ЗП начинающего специалиста по данным HeadHunter — 80–120 тыс. рублей;
— Возможность в будущем работать удаленно в IT-гигантах: ВК, Яндекс, Сбер;

Ученики создадут проекты для портфолио и смогут оценить, подходит им профессия и готовы ли дальше развиваться в этом направлении.

Выберите курс и оставьте заявку на бесплатное обучение 👉 clck.ru/33PaBD

Поторопитесь! Набор идет до 5 февраля
Explicit Conversion Flag

Флаг явного преобразования используется для преобразования значения поля format перед его непосредственным форматированием.

Это поле можно использовать для переопределения поведения format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:

!r – преобразует значение в строку, используя функцию repr()
!s – преобразует значение в строку, используя функцию str()

В примере, в случае с флагом !r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s – без кавычек (в более удобном для чтения виде).

#repr #str #format
За прошедший год ИТ-рынок масштабно трансформировался. Что теперь будет? На какие тренды опираться прямо сейчас и в чем себя искать, если ты разработчик?

Об этом рассказала ключевой специалист в найме Анна Панова, руководитель рекрутмента Product&Tech в Авито. Она выступила на сессии «ИТ-кадры — как живется сегодня ИТ-специалистам в Москве?», которая прошла на конференции от столичного Департамента информационных технологий и партнёров.

Из более 5500 сотрудников Авито почти 2000 входят в технологическое ядро компании. Топовыми являются направления инфраструктуры и бэкенда. Офисы компании находятся в Москве, Санкт-Петербурге и Казани.
Вычисляем размер объектов в памяти

Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией sys.getsizeof(object[, default]). Поскольку Python написан в полном соответствии с парадигмой ООП, таким объектом может быть все что угодно.

Однако, следует помнить, что хотя все built-in (встроенные) объекты и вернут правильный размер, в общем случае это не должно быть верно для каких-либо пользовательских объектов.

Аргумент default позволяет определить значение, которое будет возвращено, если тип объекта не предоставляет средства для извлечения размера и вызовет TypeError .

Функция getsizeof вызывает метод __sizeof__ объекта и добавляет дополнительные служебные данные сборщика мусора, если конечно объект управляется сборщиком мусора.

#sys #sizeof #oop
Тестирование на pytest

pytest — ближе по духу к языку Python нежели unittest, которая накладывает определенные обязательства при разработке тестов. Например, создание классов-наследников от TestCase или выполнение определенной процедуры запуска тестов.

Но при разработке на pytest ничего этого делать не нужно. Вы просто пишете функции, которые должны начинаться с "test_" и используете assert, встроенные в Python.

Также он поддерживает запуск тестов на unittest и nose, то есть полная обратная совместимость с ними.

#тестирование #pytest #assert
2024/09/28 17:28:39
Back to Top
HTML Embed Code: