Python tricks | Хитрости Питона
5.88K subscribers
2.21K photos
26 videos
1 file
2.52K links
Здесь вы найдете лучшие практики и приёмы, которые используют опытные программисты.

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

Мы на платформе: https://telegram.me/python_tricks

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Объясните, что такое monkey patching и приведите пример

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

🔗 Python tricks
Что такое магические методы dunder

Магические методы, также известные как «dunder» (double underscore) методы в Python, это специальные методы, которые начинаются и заканчиваются двойным подчеркиванием. Они позволяют определить, как объекты этого класса будут вести себя в различных контекстах, например, при использовании операторов Python, таких как +, -, *, / и т.д., при вызове функций и методов, при сериализации и многое другое.

🔗 Python tricks
Как начать отладку при утечке памяти в рабочем приложении

Для отладки утечек памяти в Python можно использовать инструменты, такие как Memory Profiler или objgraph.

Запустите вашу программу с помощью команды python -m memory_profiler my_script.py. Будет выведен подробный отчет о том, сколько памяти используется в каждой строке программы, а также общее использование памяти и любые утечки.

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

🔗 Python tricks
В каких ситуациях возникает исключение NotImplementedError

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

🔗 Python tricks
Генераторные фунции (generator functions)

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

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

🔗 Python tricks
Конструктор

Метод, который вызывается при создании объектов, в ООП зовётся конструктором. Он нужен для объектов, которые изначально должны иметь какие-то значение. Например, пустые экземпляры класса "Студент" бессмысленны, и желательно иметь хотя бы минимальный обозначенный набор вроде имени, фамилии и группы.

В качестве Питоновского конструктора выступает метод init()

🔗 Python tricks
Методы сравнения объектов между собой (ч.1)

Метод lt(self, other) в Python позволяет определить порядок сортировки объектов при использовании встроенных функций сортировки, таких как sorted(). При реализации этого метода в классе можно указать, какие атрибуты объекта должны учитываться при сравнении с другими объектами для определения их относительного порядка.

Например, предположим, что у нас есть класс Point, который представляет собой точку на плоскости и имеет атрибуты x и y. Мы можем определить метод lt(self, other) в классе Point, чтобы при сравнении двух точек учитывался их порядок по оси x, а в случае равенства координат по оси x - по оси y.

🔗 Python tricks
Использование SQLAlchemy для автоматического создания таблиц из моделей

При работе с базами данных можно упростить процесс создания и управления таблицами, используя SQLAlchemy, который автоматически создаёт таблицы на основе Python-классов (моделей).

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

🔗 Python tricks
Использование ORM (Object-Relational Mapping) для упрощения работы с базами данных

ORM (Object-Relational Mapping) позволяет разработчикам работать с базами данных через объектно-ориентированные интерфейсы, что значительно упрощает взаимодействие с данными и уменьшает количество SQL-запросов, которые необходимо писать вручную.

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

🔗 Python tricks
Использование pandas для быстрой работы с базами данных

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

Этот лайфхак позволяет значительно ускорить процесс работы с данными в Python, особенно если вы часто работаете с большими объемами информации из базы данных!

🔗 Python tricks
Использование метода @property для создания геттеров

В Python можно создавать геттеры и сеттеры для полей класса без явного объявления методов вроде get_name и set_name. Для этого используется декоратор @property, который позволяет обращаться к методу как к атрибуту, сохраняя при этом контроль над доступом к данным.

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

🔗 Python tricks
Использование метода __repr__ для удобного отображения объектов

Когда вы разрабатываете классы, бывает полезно сделать так, чтобы объекты этого класса имели осмысленное текстовое представление при выводе. Для этого можно переопределить метод repr, который отвечает за представление объекта в строковом виде.

Этот лайфхак будет полезен разработчикам, которые часто выводят объекты в отладочных целях. Вместо отображения стандартной информации о памяти (например, <Person object at 0x...>), вы получите наглядное описание объекта. Это улучшает читаемость кода, особенно при отладке и логировании.

🔗 Python tricks
Наследование с использованием метода super()

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

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

🔗 Python tricks
math.floor

math.floor — это функция в модуле math, которая округляет число вниз до ближайшего целого. Если число уже является целым, оно остается неизменным. Если число имеет дробную часть, оно округляется вниз до ближайшего меньшего целого.

🔗 Python tricks
Использование тернарного оператора для компактного условия в одну строку

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

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

🔗 Python tricks
Использование списковых включений (list comprehensions) для фильтрации и трансформации данных

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

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

🔗 Python tricks
Использование оператора "Walrus" (:=) для одновременного присваивания и использования значения

Оператор "Walrus" (:=) в Python позволяет одновременно присваивать значение переменной и использовать его в выражении. Это особенно полезно для сокращения кода, когда вам нужно вычислить значение и сразу же использовать его.

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

🔗 Python tricks
Использование списковых включений (List Comprehensions) для создания списков на основе других коллекций

Когда вам нужно создать новый список, применяя операцию ко всем элементам другого списка или фильтруя элементы по определённым условиям, списковые включения (list comprehensions) позволяют сделать это в одной строке.

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

🔗 Python tricks
Использование модуля os.path и pathlib для удобной работы с путями

Когда вы работаете с файлами и директориями, важно уметь легко и безопасно манипулировать путями к файлам. Модули os.path и pathlib в Python предоставляют удобные методы для работы с путями, объединения их, получения имени файла и расширения, а также проверки существования файла или директории.

Использование os.path и pathlib помогает сделать код более безопасным и понятным, упрощая работу с путями и снижая вероятность ошибок, связанных с неправильным использованием путей к файлам.

🔗 Python tricks
Быстрое получение основных статистических характеристик с использованием statistics или pandas

Если вам нужно получить основные статистические показатели (среднее, медиану, стандартное отклонение и т.д.) для набора данных, Python предлагает удобные инструменты для этого. Вы можете использовать модуль statistics для работы с небольшими наборами данных или pandas для анализа больших данных в DataFrame.

Использование statistics и pandas помогает упростить анализ данных и быстро получить необходимую информацию о числовом наборе, будь то список чисел или целый столбец данных в таблице.

🔗 Python tricks
Деструкторы

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

Используется в основном для закрытия файлов, подключений к БД.

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

🔗 Python tricks