Python академия
7.74K subscribers
2.27K photos
5 videos
264 links
Python академия. Учи Python быстро и легко. По всем вопросам @evgenycarter
Download Telegram
Упрощение создания операторов сравнения

Для создания объектов с поддержкой операторов сравнения в классе обычно требуется реализовать большое количество магических методов, а именно – __lt__, __le__, __eq__, __ne__, __gt__, __ge__.

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

В таком случае достаточно реализовать в классе только __lt__ и __eq__. Эти два метода являются минимумом, который нужен декоратору для конструирования остальных методов.

Подписывайтесь на канал 👉@pythonofff
Очистка списка

С помощью функции filter() подчищаем список удаляя значения False, None, 0, "".
Такой метод очень хорошо себя показывает в объёмных программах при работе с массивами.

Подписывайтесь на канал 👉@pythonofff
Перегрузка операторов сравнения

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

Например, под капотом записи a < b вызывается a.__lt__(b). Для каждого оператора сравнения существует свой магический метод. Подробнее про то, какой метод за какой оператор отвечает, выше в коде.

Писать все шесть методов получается слегка громоздко, поэтому зачастую используют декоратор total_ordering из functools.

Подписывайтесь на канал 👉@pythonofff
Анонимные функции

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

Подписывайтесь на канал 👉@pythonofff
Список импортов по умолчанию

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

Таким образом, при импорте вида from module import * из модуля c подобной записью подключатся только объекты с названиями из списка __all__.

Тем не менее, в примере выше импортировать функцию foo из такого модуля всё ещё можно, например, с помощью записи from module import foo.

Подписывайтесь на канал 👉@pythonofff
sh: команды терминала прямо из кода

Порой применение стандартных библиотек os и subprocess превращается в головную боль для разработчика. Но есть удобная альтернатива – библиотека sh.

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

Подписывайтесь на канал 👉@pythonofff
База данных на минималках

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

Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод shelve.open поддерживает протокол контекстного менеджера, то есть можно не вызывать метод close.

В документации заявляют, что такая база данных является "надежной". Но учитывая, что shelve написан на pickle, его стоит использовать только в совсем маленьких проектах.

Подписывайтесь на канал 👉@pythonofff
Анаграммы

Интересное применение класса Counter — это поиск анаграмм. Анаграмма — это слово или фраза, сформированные перестановкой букв другого слова или фразы.

Если объекты Counter двух строк эквивалентны, значит, они являются анаграммами.

Подписывайтесь на канал 👉@pythonofff
Олимпиада студентов "Я - Профессионал" дает возможность поступления в магистратуру и аспирантуру МФТИ. Регистрируйтесь на направления: математика, физика, искусственный интеллект и физика мегасайенс до 15 ноября 2022 г.
Дипломантам - денежные призы, льготы при поступлении МФТИ и другие ведущие вузы страны, стажировки, вакансии и консультации в крупных компаниях-партнерах олимпиады.

https://yandex.ru/profi
Сохраняем бинарные данные

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

Но классы, функции и методы сохранить не получится. Здесь также важно понимать, что при сохранении объекта сохраняется строка, указывающая, к какому классу относится этот объект.

Однако будьте осторожнее, pickle не защищен от ошибочных или вредоносных данных. Никогда не извлекайте данные, полученные из ненадежных или не прошедших проверку подлинности источников.

Подписывайтесь на канал 👉@pythonofff
Подсчет частотности элементов в списке

Отличный способ посчитать частотность элемента в списке — это использование класса Counter.

Счетчик Python отслеживает частотность каждого элемента в контейнере. Counter() возвращает словарь с элементами в качестве ключей и частотностью в качестве значений.

Мы также используем функцию mostcommon() , чтобы получить mostfrequent element в списке.

Подписывайтесь на канал 👉@pythonofff
Аннотации типов: Union и Optional

Ранее на канале был пост про базовые аннотации типов. Но важно знать и про такие аннотации, как Union и Optional.

При необходимости допустить использование не любых типов, а только некоторых, можно использовать аннотацию Union[T, ...] с указанием списка типов в квадратных скобках.

Для объявления опциональных переменных используется Optional[T]. Такая аннотация нужна для переменных, которые либо имеют значение определенного типа, либо равны None.

Кстати, аннотация Optional[T] эквивалентна Union[T, None].

Подписывайтесь на канал 👉@pythonofff
Проверка строки на палиндром

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

Таким образом палиндромы становятся простейшей программой в Python.

Подписывайтесь на канал 👉@pythonofff
Заменяем часть строки

Со строками в Python работать очень удобно, так как встроенных методов для них предостаточно. Одним из методов является str.replace(), который позволяет заменять части строк.

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

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

Подписывайтесь на канал 👉@pythonofff
Объединение списка строк в одну строку

Метод join() объединяет список строк, заданный как аргумент, в одну строку. В нашем случае мы объединили их, используя в качестве разделителя запятую.

Подписывайтесь на канал 👉@pythonofff
Создаем пакеты

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

При импорте вида from package import * будет подключены либо все модули и объекты модуля __init__.py, либо то, что находится в переменной __all__ в том же модуле __init__.py — подробнее про эту переменную было в посте ранее.

Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.

Подписывайтесь на канал 👉@pythonofff
Функция enumerate для получения пар индекс-значение

Функция enumerate() применяется в случаях, когда необходим счётчик количества элементов в последовательности. Позволяет избавиться от необходимости инициировать и обновлять отдельную переменную-счётчик.

Подписывайтесь на канал 👉@pythonofff
Завершение программы

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

По факту функция просто поднимают исключение SystemExit. А при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора.

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

Подписывайтесь на канал 👉@pythonofff
Перемешивание

Располагает элементы списка в произвольном порядке. Обратите внимание: shuffle работает в обычном порядке и возвращает None.

Подписывайтесь на канал 👉@pythonofff
Создаем виртуальное окружение

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

В стандартной библиотеке Python третьей версии есть пакет venv, который позволяет создавать виртуальные окружения удобно и быстро. Пример представлен на картинке.

Скрипт activate в директории bin предназначен для активации окружения, а команда deactivate в уже активированном окружении — для выхода из него.

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

Подписывайтесь на канал 👉@pythonofff
Многоточие в Python

Многоточие Python – это последовательность из трех точек, часто используемая в естественных языках. Но чего вы, возможно, не знаете – это еще и валидный объект в Python

Подписывайтесь на канал 👉@pythonofff