Forwarded from Senior Python Developer
Как работают статические методы
Статические методы создаются в классе при помощи декоратора
Такой тип методов не может модифицировать ни объект, ни сам класс. То есть передавать объект или класс и прописывать self или cls в аргументах не нужно.
Обычную функцию стоит вносить в класс в качестве статического метода в том случае, когда эта функция логически относится к классу и имеет смысл там быть.
Статические методы создаются в классе при помощи декоратора
@staticmethod. Такие методы привязаны к классу, а не объекту — в этом и есть основное отличие.Такой тип методов не может модифицировать ни объект, ни сам класс. То есть передавать объект или класс и прописывать self или cls в аргументах не нужно.
Обычную функцию стоит вносить в класс в качестве статического метода в том случае, когда эта функция логически относится к классу и имеет смысл там быть.
Forwarded from Senior Python Developer
🐍 Валидация данных при помощи Pydantic
Python хорош тем, что у него много библиотек. Автор рассказывает, зачем нужна Pydantic, чем она лучше marshmallow, как ей пользоваться и как с её помощью правильно проверять данные.
https://youtu.be/_5kCjRj6bng
Python хорош тем, что у него много библиотек. Автор рассказывает, зачем нужна Pydantic, чем она лучше marshmallow, как ей пользоваться и как с её помощью правильно проверять данные.
https://youtu.be/_5kCjRj6bng
YouTube
"Валидация данных при помощи Pydantic", Степан Плетнев (Tinkoff.ru)
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
Forwarded from Senior Python Developer
Логические all и any
Одна из многих причин, почему Python является таким популярным языком, заключается в том, что он читаем и выразителен. Предлагаю взглянуть на прикрепленный код.
Функция any возвращает значение True, если хотя бы одно из переданных утверждений верно, all – в случае, если все верны.
В целом эти две функции заслуживают отдельного внимания всего лишь из-за их простоты в использовании.
Одна из многих причин, почему Python является таким популярным языком, заключается в том, что он читаем и выразителен. Предлагаю взглянуть на прикрепленный код.
Функция any возвращает значение True, если хотя бы одно из переданных утверждений верно, all – в случае, если все верны.
В целом эти две функции заслуживают отдельного внимания всего лишь из-за их простоты в использовании.
Forwarded from Senior Python Developer
Упаковка параметров с помощью urlencode
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:
Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция urlencode из из модуля urllib.
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:
url = 'https://example.com?item={}&size={}&color={}&amount={}'.format('t-shirt', 'M', 'white', 5)Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция urlencode из из модуля urllib.
Forwarded from Senior Python Developer
🐍🚀⌛ Django, Celery и Redis: гайд по работе с асинхронными задачами
Подробная инструкция по интеграции Celery и Redis в проект Django для асинхронной обработки длительных и ресурсоемких задач в фоновом режиме.
https://proglib.io/p/django-celery-i-redis-gayd-po-rabote-s-asinhronnymi-zadachami-2022-08-22
Подробная инструкция по интеграции Celery и Redis в проект Django для асинхронной обработки длительных и ресурсоемких задач в фоновом режиме.
https://proglib.io/p/django-celery-i-redis-gayd-po-rabote-s-asinhronnymi-zadachami-2022-08-22
Библиотека программиста
🐍🚀⌛ Django, Celery и Redis: гайд по работе с асинхронными задачами
Подробная инструкция по интеграции Celery и Redis в проект Django для асинхронной обработки длительных и ресурсоемких задач в фоновом режиме.
Forwarded from Senior Python Developer
Именование среза с функцией slice
Работа с множеством значений, которые заданы индексами, может быстро закончиться беспорядком как в плане поддержки, так и читабельности кода.
Один из вариантов улучшения ситуации заключается в использовании констант для значений, задаваемых индексами. Однако есть и более удачный способ написания качественного кода, как показано на картинке.
Работа с множеством значений, которые заданы индексами, может быстро закончиться беспорядком как в плане поддержки, так и читабельности кода.
Один из вариантов улучшения ситуации заключается в использовании констант для значений, задаваемых индексами. Однако есть и более удачный способ написания качественного кода, как показано на картинке.
Forwarded from Senior Python Developer
Вывод уникального идентификатора переменной
Уникальный идентификатор переменной находится с помощью метода id(). Для этого нужно просто передать в метод имя переменной.
Идентификатор объекта – это целое число, которое гарантированно будет уникальным и постоянным для этого объекта в течение его жизненного цикла.
Уникальный идентификатор переменной находится с помощью метода id(). Для этого нужно просто передать в метод имя переменной.
Идентификатор объекта – это целое число, которое гарантированно будет уникальным и постоянным для этого объекта в течение его жизненного цикла.
Forwarded from Психология от Искусственного Интеллекта
Forwarded from Senior Python Developer
Отправляем универсальные уведомления
В Python присутствует интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
В Python присутствует интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
Forwarded from Senior Python Developer
Метод str.swapcase()
Возвращает копию строки с измененным регистром. Если символ был в нижнем регистре — он перейдёт в верхний и наоборот. Даже такой редко используемый метод был предусмотрен разработчиками языка :D
Возвращает копию строки с измененным регистром. Если символ был в нижнем регистре — он перейдёт в верхний и наоборот. Даже такой редко используемый метод был предусмотрен разработчиками языка :D
Forwarded from Senior Python Developer
Python-dateutil
Пакет предлагает мощные расширения стандартного модуля datetime. С этой библиотекой можно сделать много полезного, но мы ограничимся одним примером, который используется чаще всего, — нечеткий разбор (парсинг) дат. Документацию пакета можете найти по ссылке.
Пакет предлагает мощные расширения стандартного модуля datetime. С этой библиотекой можно сделать много полезного, но мы ограничимся одним примером, который используется чаще всего, — нечеткий разбор (парсинг) дат. Документацию пакета можете найти по ссылке.
Forwarded from Senior Python Developer
Преобразование списка в словарь
В этом примере мы преобразуем список формата [key_1, value_1, key_2, value_2] в словарь {key_1: value_1, key_2: value_2}.
Пример преобразования представлен на картинке.
В этом примере мы преобразуем список формата [key_1, value_1, key_2, value_2] в словарь {key_1: value_1, key_2: value_2}.
Пример преобразования представлен на картинке.
Forwarded from Senior Python Developer
Получение срезов итераторов
Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).
Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.
Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).
Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.
Forwarded from Senior Python Developer
This media is not supported in your browser
VIEW IN TELEGRAM
tqdm
Отличный инструмент для подключения диаграммы выполнения вашей программы. Название происходит от арабского слова "taqadum", что означает "прогресс".
Для создания прогресс-бара необходим лишь один вызов функции:
На гифке пример прогрессбара. В реальном времени показывается процент выполнения, визуальное представление, сколько итераций завершилось, скорость выполнения и ожидаемое время окончания, а сам модуль не требует никаких внешних библиотек.
Отличный инструмент для подключения диаграммы выполнения вашей программы. Название происходит от арабского слова "taqadum", что означает "прогресс".
Для создания прогресс-бара необходим лишь один вызов функции:
from tqdm import tqdm
from tqdm.notebook import tqdm # для использования в Jupyter Notebook
for i in tqdm(range(10000)):
...На гифке пример прогрессбара. В реальном времени показывается процент выполнения, визуальное представление, сколько итераций завершилось, скорость выполнения и ожидаемое время окончания, а сам модуль не требует никаких внешних библиотек.
Forwarded from Senior Python Developer
Ограничение использования памяти и процессора
Если вместо оптимизации программы вы хотите ограничить используемые ею ресурсы компьютера, можно использовать полезные библиотеки. На картинке показано, как реализовать ограничения процессорного времени и объема используемой памяти.
Для работы с процессором мы сначала получаем значения soft и hard лимитов для ресурса LIMIT_CPU, а затем ставим лимит, используя некоторое число секунд, задаваемое при помощи аргумента seconds, и значение hard лимита. После регистрируется обработчик signal, который начинает процедуру выхода при превышении выделенного нами времени. Для работы с памятью мы также получаем значения hard и soft лимитов, а потом ставим ограничения с помощью метода setrlimit, передавая в него размер ограничения и значение hard лимита.
Если вместо оптимизации программы вы хотите ограничить используемые ею ресурсы компьютера, можно использовать полезные библиотеки. На картинке показано, как реализовать ограничения процессорного времени и объема используемой памяти.
Для работы с процессором мы сначала получаем значения soft и hard лимитов для ресурса LIMIT_CPU, а затем ставим лимит, используя некоторое число секунд, задаваемое при помощи аргумента seconds, и значение hard лимита. После регистрируется обработчик signal, который начинает процедуру выхода при превышении выделенного нами времени. Для работы с памятью мы также получаем значения hard и soft лимитов, а потом ставим ограничения с помощью метода setrlimit, передавая в него размер ограничения и значение hard лимита.
Forwarded from Senior Python Developer
👨💻 Алгоритмы на Python — лекции МФТИ
Тимофей Хирьянов — один из лучших преподавателей по программированию, его занятия легко смотрятся и запоминаются, а богатый опыт работы в индустрии и педагогике помогает грамотно структурировать курсы.
Лекция №1
https://youtu.be/KdZ4HF1SrFs
Лекция №2
https://youtu.be/ZgSx3yH7sJI
Лекция №3
https://youtu.be/b8m9uRMpKJk
Лекция №4
https://youtu.be/DvsCUI5FNnI
Лекция №5
https://youtu.be/3I6OjxoeSS8
Весь плейлист с остальными лекциями: https://youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
Тимофей Хирьянов — один из лучших преподавателей по программированию, его занятия легко смотрятся и запоминаются, а богатый опыт работы в индустрии и педагогике помогает грамотно структурировать курсы.
Лекция №1
https://youtu.be/KdZ4HF1SrFs
Лекция №2
https://youtu.be/ZgSx3yH7sJI
Лекция №3
https://youtu.be/b8m9uRMpKJk
Лекция №4
https://youtu.be/DvsCUI5FNnI
Лекция №5
https://youtu.be/3I6OjxoeSS8
Весь плейлист с остальными лекциями: https://youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
YouTube
Алгоритмы на Python 3. Лекция №1
Практика: http://judge.mipt.ru/mipt_cs_on_python3/
Telegram-группа: https://t.me/tkhirianov_mipt_cs_on_python3
Спонсировать: https://www.patreon.com/tkhirianov или https://www.paypal.me/tkhirianov
курс: Информатика. Алгоритмы и структуры данных на Python…
Telegram-группа: https://t.me/tkhirianov_mipt_cs_on_python3
Спонсировать: https://www.patreon.com/tkhirianov или https://www.paypal.me/tkhirianov
курс: Информатика. Алгоритмы и структуры данных на Python…
Forwarded from Аркадий
по SQL я корчое что бы потренироватьься прорешал все задачки на SQL Academy, на это ушло часа 4 суммарно, там есть пара задач где пришлось подумать
https://sql-academy.org/ru/trainer?sort=byId
https://sql-academy.org/ru/trainer?sort=byId
Процесс работы с ветками более подробно описан здесь: http://releaseflow.org/.
Общие требования к работе в git:
Любые изменения в исходном коде должны быть связаны с задачами из джиры;
Номер задачи из джиры должен дублироваться в комментарии к коммиту. Так как зачастую после слияния веток невозможно понять, где выполнялись работы;
Для упрощения работы рекомендуется установить локальные хуки (https://github.com/aeroclub-it/infrastructure-githooks). Для их работы требуется установленный python версии 3.X;
Работу с ветками можно осуществлять через скрипты (https://github.com/aeroclub-it/infrastructure-release-scripts). Они подключаются в репозиторий как подмодуль.
Для работы с исходным кодом используются следующие ветки:
master - рабочая, протестированная, стабильная версия. Предназначена для выкладки в прод;
develop - тестовая версия. Предназначена для выкладки в тест;
release/XXX - ветка, предназначенная для сборки релиза. Создается из ветки master, в нее сливаются задачи, которые нужно выпустить в текущем релизе. Все конфликты мерджей решаются здесь же. XXX - номер релиза;
feature/XXX - ветка, предназначенная для выполнения доработок. XXX - номер задачи из джиры;
hotfix/XXX - ветка, предназначенная для исправления багов. XXX - номер задачи из джиры;
создание веток с другими названиями не допускается.
Общие требования к работе в git:
Любые изменения в исходном коде должны быть связаны с задачами из джиры;
Номер задачи из джиры должен дублироваться в комментарии к коммиту. Так как зачастую после слияния веток невозможно понять, где выполнялись работы;
Для упрощения работы рекомендуется установить локальные хуки (https://github.com/aeroclub-it/infrastructure-githooks). Для их работы требуется установленный python версии 3.X;
Работу с ветками можно осуществлять через скрипты (https://github.com/aeroclub-it/infrastructure-release-scripts). Они подключаются в репозиторий как подмодуль.
Для работы с исходным кодом используются следующие ветки:
master - рабочая, протестированная, стабильная версия. Предназначена для выкладки в прод;
develop - тестовая версия. Предназначена для выкладки в тест;
release/XXX - ветка, предназначенная для сборки релиза. Создается из ветки master, в нее сливаются задачи, которые нужно выпустить в текущем релизе. Все конфликты мерджей решаются здесь же. XXX - номер релиза;
feature/XXX - ветка, предназначенная для выполнения доработок. XXX - номер задачи из джиры;
hotfix/XXX - ветка, предназначенная для исправления багов. XXX - номер задачи из джиры;
создание веток с другими названиями не допускается.
releaseflow.org
releaseflow - the trendy name for release branching
Forwarded from Evan
#asyncio
очень хороший доклад от школы бэкенд разработки яндекса про то как устроена асинхронщина в целом и asyncio (+ есть еще два видоса на эту тему, если что найдете легко)
https://youtu.be/AXkOli6BsBY
очень хороший доклад от школы бэкенд разработки яндекса про то как устроена асинхронщина в целом и asyncio (+ есть еще два видоса на эту тему, если что найдете легко)
https://youtu.be/AXkOli6BsBY
YouTube
10. Асинхронное программирование. Лекция 1 – Эдуард Жук
Во время лекции рассмотрим, в чём проблема синхронных приложений и что с этим можно сделать.
Обсудим, что происходит с точки зрения ОС при HTTP-запросе, как обрабатывать несколько запросов одновременно и какие есть преимущества, недостатки у процессов и…
Обсудим, что происходит с точки зрения ОС при HTTP-запросе, как обрабатывать несколько запросов одновременно и какие есть преимущества, недостатки у процессов и…