Python Community
12.9K subscribers
1.26K photos
37 videos
15 files
741 links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

Сотрудничество: @cyberJohnny и @Sergey_bzd

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
⚡️ Тесты в документации

Такой подход интересен тем, что позволяет другому программисту понять как работает функция в определённых ситуациях, а вам — протестировать её работу.

Реализуется подобная фича с помощью встроенного модуля doctest. Он ищет текста, которые выглядят как интерактивные сеансы Python (>>>, ... и подобные символы).

Вы можете запускать тесты так же, как в примере, а можно с помощью терминала: python -m doctest -v example.py.

#миниурок #doctest
🔥7👍3
⚡️ Несколько вариантов одной функции

В Python у вас не может существовать несколько функций с одинаковыми именами, которые работают с разными типами данных. Но такое возможно сделать с помощью multipledispatch.

Установка: pip install multipledispatch

Просто навешиваете @dispatch на функцию, куда передаёте тип, с которыми работает именно эта функция.

В зависимости от переданных аргументов будет выбираться правильная функция.

#миниурок #multipledispatch
👍5
⚡️ Парсим YouTube

С помощью pytube мы можем узнать имя видео, его автора, где он живёт, описание и множество другого. Модуль также работает с плейлистами.

Установка: pip install pytube

Стоит отметить, что на обычном парсинге всё не заканчивается. Мы ещё можем загружать видео с ютуба на основе своих предпочтений (качество, расширение).

Подробнее весь функционал описан в документации. А исходный код можно найти на странице github.

#миниурок #pytube
👍10
⚡️ Немного про регулярные выражения

Все мы знаем, что регулярные выражения пишутся только один раз. После их просто нереально разобрать и изменить.

Один разработчик нашёл способ как это исправить используя f-строки в Python. Вот его статья.

#миниурок #re
👍3
⚡️ Создаём интерфейс командной строки

Если вы пишите консольное приложение, то обязаны позаботиться о том, чтобы пользователям было удобно им пользоваться. CLI вам поможет создать fire.

Установка: pip install fire

Модуль придерживается ООПшного стиля, что сильно упрощает интеграцию к себе в проект.

Также он предоставляет доступ ко всем атрибутам, которые переданы в него. Об этом и не только подробнее в документации.

#миниурок #fire
👍1🔥1
⚡️ Context Manager

Помните про with? Там рассказывалось про его использование с классами, но ничто не мешает использовать его с функциями. Только нужна библиотека contextlib.

Чтобы функция могла работать с with, вы добавляете @contextmanager или @asynccontextmanager, в зависимости от того, нужно ли вам асинхронное выполнение.

Только ещё вам нужно yield, чтобы вернуть объект, с которым будет работать with и при этом только приостановить работу функции. Подробнее.

#миниурок #contextlib
👍8
Multithreading vs Multiprocessing

Multithreading предполагает, что процессор может выполнять несколько потоков одновременно, где каждый поток запускает процесс. Хорошо справляется с IO нагрузкой.

Multiprocessing предполагает, что есть несколько процессоров, где каждый процессор может запускать один или несколько потоков. Хорошо справляется с большой нагрузкой на CPU.

#миниурок #multithreading #multiprocessing
👍7
⚡️ Что быстрее, [] или list?

Ответить на этот вопрос поможет timeit. Он используется для измерения скорости выполнения каких-либо задач.

Чем же плох time? Во-первых, с ним неудобно. Во-вторых, на результат влияет огромное количество факторов, начиная загруженностью процессора и заканчивая сборщиком мусора.

Кстати, подробнее ответ на вопрос из названия разбирается в этой статье.

#миниурок #timeit
🔥5👍1
⚡️ Готовим объект к отправке на луну на сервер

Первым делом Python объект надо перевести в строку. Например, в JSON формат. Сделать это лучше всего с помощью marshmallow.

Установка: pip install marshmallow

Таким образом вам не нужно добавлять convert_to_json() в каждый класс, а достаточно просто настроить схему (Schema) с полями (fields) от marshmallow.

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

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

#миниурок #marshmallow
👍2
⚡️ Какие планы?

Выложить пост через 10 минут? Или, может, отправить напоминание начать работать через час? В любом случае это не проблема с shed.

Модуль позволяет определять события, которые должны произойти через определённое время. К тому же он может работать в многопоточном режиме.

Об этих всех фишках подробнее рассказывают в документации.

#миниурок #shed
👍4
⚡️ Модуль collections

Это изменённые контейнеры (dict, list, set, tuple), которые могут сильно помочь при решении задач.

Counter(iter) — подсчитывает количество повторений объекта в iter. С помощью most_common(n) можно получить n самых повторяющихся объектов.

defaultdict(default_factory) — создаёт и подставляет новый объект, созданный default_factory, если не переданного ключа не существует.

namedtuple(typename, field_names) — Создаёт тип кортежа с именованными полями.

#миниурок #collections
👍1
⚡️ Работаем с путями

Зачем изобретать велосипед с os.path, если с Python3.4 существует pathlib? Этот модуль упрощает работу с путями и добавляет новые функции.

Например, мы можем писать пути, которые будут нормально работать на Windows и Linux. Об этом рассказывается тут.

А если вам пришлось редактировать старый код с os, то это не проблема, ведь все пути это PathLike объекты.

#миниурок #pathlib
🔥3
⚡️ Асинхронное программирование

Давайте приготовим ужин. Закидываем пельмешки в кастрюлю, ждём 5 минут, а пока они готовятся, режем хлеб и делаем салатик.

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

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

#миниурок #async
👍11
⚡️ Виртуальная среда

Сколько у вас проектов на пк? И у каждого свои зависимости. Не хотите перенести их в отдельную папку?

Виртуальная среда — это место, которое изолированно от системы. Создать — python3 -m venv path/to/env.

Запуск — source path/to/env/bin/activate. После можете спокойно python, pip, easy_install. Все действия будут происходить внутри среды.

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

#миниурок
👍7
⚡️ Тестируем код

Если бы люди были роботами, нам бы не приходилось проверять код и pytest был бы никому не нужен.

Но сейчас это самая популярная библиотека для автоматизации тестирования, поэтому её стоит знать.

Она довольно удобная, выводит подробный отчёт, быстро настраивается и даже поддерживает плагины.

Недостатки тоже есть, но они незаметны: доп. зависимость и требует чутка больше знаний, чем unittest.

#миниурок
👍11
⚡️ Парсим сайты

Нужно узнать заголовок последней новости? Отслеживать цену товара? Или автоматически находить решение на Stackoverflow? Вам поможет Beautiful soup.

Установка: pip install beautifulsoup4

Модуль может парсить HTML и XML файлы и находить на них нужную информацию. Например, найти заголовок (тег h1) или все ссылки на сайте.

Функционал довольно большой и весь список можно найти в документации.

#миниурок #bs4
👍13
⚡️ Красивые ошибки

Можно скрасить неприятные эмоции от ошибок, установив pretty_errors. Модуль редактирует вывод исключений.

Установка: pip install pretty_errors

А потом ещё пишем python -m pretty_errors, отвечаем на вопросы и пользуемся. Если не знаете, что отвечать, просто нажимайте Enter.

Теперь попробуйте поделить на ноль и схлопнется вселенная и получите ошибку как на фото выше.

#миниурок #pretty_errors
👍5
⚡️ Работаем с Excel

О да, эти таблички. Автоматизировать работу с ними можно за счёт openpyxl.

Установка: pip3 install openpyxl

Этот модуль умеет всё то, что умеет Excel (форматирование, формулы, всё доступно), так ещё и нормально работает на Linux.

К тому же у него очень хорошая документация. Там же можно найти уроки, которые помогают начать работать с модулем.

#миниурок #excel
👍8🔥1
⚡️ Модуль inspect

С ним вы окунётесь в глубины Python и познаете принципы его работы... Почти. На самом деле он просто вытаскивает данные из объекта или делает какие-то проверки.

signature(obj) — сигнатура, то, как у функции определены аргументы. Используйте, если не понимаете, почему float(x='1') выдаёт ошибку в Python 3.9.

inspect.getmro(class) — если нужно узнать иерархию классов (или можно просто использовать __mro__).

inspect.getsource(obj) — исходный код объекта, inspect.getmodule(obj)) — модуль, в котором находится объект.

#миниурок #inspect
⚡️ Профилируем код

Не можете найти слабое место у вашего алгоритма (не можете, поскольку его нет 😎)? Давайте тогда посмотрим на использование ресурсов с помощью scalene.

Установка: pip install scalene

Вам не нужно ничего добавлять в код, просто пишете scalene file.py и получаете вывод, как на фото выше. Преимущества и сравнение можно найти тут.

#миниурок #scalene
🔥11