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

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

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

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
⚡️ Работаем с DOM

Для этого в Python существует модуль xml.dom или, с минимальной реализацией, xml.dom.minidom, о котором мы и поговорим.

parse(file) — считывает и парсит модель из файла file. Возвращает Document из того же модуля.

parseString(str) — парсит DOM из строки. Возвращает тот же Document, что и parse.

Подробнее же об объектах можете почитать на сайте документации.

#миниурок #xml #dom
Что выведет код выше?
Anonymous Quiz
27%
True
35%
False
27%
Ошибку
11%
Узнать ответ
⚡️ Собираем информацию об объекте

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

inspect.getsource(obj) — возвращает исходный код модуля, класса, функции, или выбрасывает OSError.

inspect.signature(func) — показывает, как определены параметры у функции.

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

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

Условие:

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

Примеры:

subsets([1, 2, 2]) -> [[], [1], [2], [1, 2], [2, 2], [1, 2, 2]]
subsets([1, 2, 3]) -> [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
subsets([0]) -> [[], [0]]

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

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

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

Псевдонимы создаются так же, как и переменные, name = type.

Особые типы создаются при помощи NewType, на вход он принимает название и тип, который хранит.

Обобщения хранят в себе объекты, тип которых сразу неизвестен. Создавать собственные дженерики можно с помощью Generic и TypeVar.

Это — ещё не все. Подробнее вы, как обычно, можете почитать в документации.

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

Условие:

Вам необходимо написать код, который бы возвращал сумму периметров всех квадратов в прямоугольнике, когда имеется n + 1 квадратов, расположенных так же, как на рисунке.

Примеры:

perimeter(1) -> 8
perimeter(5) -> 80 # 4 * (1 + 1 + 2 + 3 + 5 + 8) = 4 * 20 = 80
perimeter(20) -> 114624

Подсказка: воспользуйтесь последовательностью Фибоначчи.

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

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

В Python есть интересная конструкция, позволяющая добавлять else в конец определения цикла while или for.

Вызывается блок кода только тогда, когда цикл закончил итерацию объекта. Иначе он просто игнорируется.

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

#теория #for
Что выведет код выше?
Anonymous Quiz
25%
hi! None
22%
None hi!
27%
hi!
14%
Ничего
13%
Узнать ответ
⚡️ Переводим объект в строку

Думаем, вы понимаете, что практически невозможно передать объект по http(s) протоколу в его чистом виде. Поэтому придумали marshmallow — модуль, переводящий объекты в текст и обратно.

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

Schema
, fields — самое важное, что вам надо знать. Schema — базовый класс для всех схем с данными. Он состоит из полей, которые создаются с помощью fields.

После вызываем у схемы dump и load, методы, позволяющие переводить строку в объект и обратно.

Это, конечно, ещё не всё. Подробнее о модуле можете вы почитать тут.

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

Условие:

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

Примеры:

convert_to_rgb(1, 1, 1) -> (1, 1.0, 1.0)
convert_to_rgb(0.9, 0.5, 0.5) -> (0.75, 0.25, 0.55)
convert_to_rgb(0.72, 0.624, 0.48) -> (0.56, 0.44, 0.8)

Подсказка: почитайте про модуль colorsys

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

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

Кэширование — действительно полезная вещь, если у вас есть тяжёлые математические операции. Оно уменьшает использование процессора, но потребляет ОЗУ.

Декораторы cache и cached_property как раз созданы для этой задачи. Они создают словарь по типу «Входные данные : результат» и сохраняют туда результат работы функции.

cached_property — это то же самое, что и @cache @property. И, поскольку это свойство, используется только в классах.

Если вы пользуетесь версией старее python 3.9, то воспользуйтесь декоратором lru_cache.

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

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

Условие:

В этот раз вам необходимо узнать, является ли число — числом Армстронга?

Примеры:

num_armstrong(7) -> True
num_armstrong(371) -> True # 3^3 + 7^3 + 1^3 = 371
num_armstrong(120) -> False

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

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

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

r — открывает файл для чтения и только. w — открывает файл для записи, но перед этим полностью его очищает.

x — создаёт новый файл или выдаёт ошибку, если он уже существует. a — открывает файл для записи добавляя в конец данные. Выдаёт ошибку, если файла не существует.

+ — дополнение, открывает файл для чтения и записи. Разница между w+ и r+ в том, что в первом случае файл очищается.

b, t — открывает файл в бинарном или текстовом режиме. То есть позволяет работать с байтами или с текстом. По умолчанию — t.

#теория