Python Community
13.1K subscribers
1.24K photos
26 videos
15 files
712 links
Python Community RU - СНГ сообщество Python-разработчиков

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

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

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
Что выведет код выше?
Anonymous Quiz
7%
6
16%
5
16%
3
14%
2
46%
Узнать ответ
⚡️ Работаем с логами

Для этого в Python существует удобный модуль logging, позволяющий управлять логами в пару строк.

logging.getLogger(name=None) — возвращает экземпляр логера на основе имени. Может быть полезна при разработке модулей.

logging.basicConfig(**kwargs) — позволяет задать настройки модулю, например, имя файла (filename), формат записи (format), уровень важности (level).

debug(), info(), warning(), error(), critical() — позволяют записывать информацию в логер на определённом уровне важности.

О том, какие уровни важности использовать, вы можете почитать в HOWTO, а подробнее о функционале модуля — в документации.

#миниурок #logging
⚡️ Задачка с собеседования | #Hard

Условие:

Вам необходимо проверить, в правильном ли порядке расставлены {}, (), [], <>. Вместе с ними может идти и другой текст, поэтому вам стоит заняться фильтрацией строки.

Примеры:

valid_bracket("(some_data)")
valid_bracket("() [ww]1{}<>")
valid_bracket("< [ ( { })]>")
valid_bracket("(]")
valid_bracket("([9)]")

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования
⚡️ Ответ на предыдущую задачу
⚡️ Очередь с приоритетом

Это — разновидность очередей, в которой у каждого элемента есть свой приоритет. Модуль heapq реализует такую возможность, используя кучи — бинарные деревья, у которых родительский объект имеет значение, меньшее или равное любому из его дочерних узлов.

heappush(heap, value) — добавляет value в heap, сохраняя инвариантность кучи.

heappop(heap) — возвращает наименьшее значение из heap.

heapify(x) — превращает итерируемый объект x в кучу.

nsmallest(n, iter), nlargest(n, iter) — позволяют взять n-ное количество минимальных/максимальных элементов из iter.

#миниурок #heapq
⚡️ Красивый вывод данных

Если вам приходится работать с выводом списков или словарей, то вы можете упростить себе работу, использовав pprint.

PrettyPrinter(indent=1, width=80, depth=None, stream=None) — Класс, отвечающий за перевод данных в красивый формат.

indent определяет количество отступов перед объектами, а width — ширину вывода. depth — сколько объектов необходимо рекурсивно раскрывать, а stream — куда записывать все данные (по умолчанию sys.stdout).

pprint.pprint(object, ...) — функция, упрощающая работу с классом. Принимает object, который необходимо вывести и те же параметры, что и PrettyPrinter.

#миниурок #pprint
⚡️ Задачка с собеседования | #Medium

Условие:

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

Примеры:

longest_prefix(['flower', 'flow', 'flight']) -> 'fl'
longest_prefix(['car', 'cir']) -> 'c'
longest_prefix(['sol', 'ution']) -> ''

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования
⚡️ Ответ на предыдущую задачу
⚡️ Файлы конфигурации

Вряд ли клиент захочет лезть в код, чтобы поменять порт сервера, поэтому многие программисты создают файлы конфигурации. Работать с ними можно с помощью модуля configparser.

ConfigParser() — основной класс для работы с конфигами. Его можно оставить так, а можно загрузить данные, используя метод read(filename), который принимает имя файла.

Брать информацию можно используя квадратные скобки или, лучше, методом get(key, default=None).

Если вы изменили какие-то данные и хотите их сохранить, впишите метод write(file), который принимает IO файл.

#миниурок #configparser
Data Science — это про настоящее.

Алгоритмы Google уже помогают врачам на 9,4% точнее определять болезни. Беспилотники от Waymo сами передвигаются по дорогам, а нейронные сети вычисляют преступников в толпе.

Это востребовано. В 2015-м технологии Big Data использовали только 17% компаний. В 2020-м — уже 55%.

Это увлекательно. Тут нет рутинных задач. Вы будете работать на стыке IT и аналитики: предсказывать события и прогнозировать рост прибыли на основе данных.

Это перспективно. По данным HH, в России 600+ компаний ищут дата-сайентистов, включая Сбербанк, Яндекс и «Тинькофф».

Data Science реально изучить. Стать специалистом по анализу данных и machine learning можно на курсе «Профессия Data Scientist PRO» от Skillbox.

Каждый, кто купит в ноябре курс, который участвует в ЧП, получит три скидки от партнеров:

• Asus — скидка 10% на ноутбуки.
• Литрес — 25% на все книги + 2 книги в подарок из подборки.
• Clinique — скидка 40% на все, кроме новогодних коллекций.

Переходите: https://clc.to/3TPK5w и приобретайте курс со скидкой до 60%
⚡️ Аннотация типов. Часть 1

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

Тогда на помощь приходит аннотация, говорящая, что на вход должен прийти вот такой тип.

И оно никак не влияет на работу программы, как понятно из примера выше. Оно несёт смысл только для программистов и IDE.

Создаются они с помощью ":" после имени переменной. А возвращаемое значение функции — с помощью "->" в конце её определения.

Если вам стало интересно, можете посетить страницу документации.

#теория
⚡️ Задачка с собеседования | #Medium

Условие:

Вам необходимо узнать, какой тип аннотирован у переменной. На вход идёт строка с определением переменной, на выход — строка-тип. Будут использоваться самые примитивные типы (str, int, float). Если тип не определён, возвращает None.

Примеры:

get_annotation("a: str = 'b: int = 1'") -> 'str'
get_annotation('a: int') -> 'int'
get_annotation("a = 'b: int = 1'") -> None
get_annotation('a = 1') -> None

📌 Пишите ваше решение в комментариях. Решение будет через несколько часов на этом канале. 👇

#Задачка_с_собеседования
⚡️ Универсальный инструмент, пользу которого оценит любой участник этого канала.

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

Один из наиболее подходящих по всем вышеперечисленным критериям сервис - это Canva. Если вы еще не пробовали его в действии, пришло время это исправить!

👉 Во-первых канва - это универсально. Вы сможете нарисовать логотип, баннер, персональную визитку, смонтровать рекламное видео для сторис или выбрать подходящее вашему контенту бесплатное стоковое фото - все, для любой сферы вашей деятельности в одном месте.

👉 Во-вторых, не обязательно ничего скачивать или платить за подписку. Все самые необходимые инструменты доступны бесплатно в веб-версии. А еще есть удобный софт для телефона, ноутбука или планшета, на любой ОС.

👉 В-третьих, не нужно быть графическим дизайнером, чтобы начать работу. Все редактирование очень интуитивно, на базе интерфейса drag-n-drop.

А еще любой проект можно сохранить и вернуться к нему в любое удобное время, с любого другого устройства. Отличная новость для тех, кто ценит мобильность и свое время.

Хотите попробовать? Переходите по ссылке — https://fas.st/KB401
⚡️ Ответ на предыдущую задачу
⚡️ Работаем с архивами

Если вам необходимо считать данные с zip архива, то можете воспользоваться модулем zipfile.

ZipFile(file, mode='r') — открывает архив для чтения/записи (зависит от mode). После этого вы можете проводить с ним такие операции:

ZipFile.open(name, mode='r')
— позволяет открыть файл внутри архива.

ZipFile.extractall(path=None) — извлекает все файлы и папки в директорию path.

Поскольку модуль работает с файловой системой, его необходимо закрывать, используя close() или оператор with.