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

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

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

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Эффективное использование метода __ipow__(self, other[, modulo])

Метод ipow(self, other[, modulo]) в Python позволяет определить поведение оператора возведения в степень с присваиванием (=) для пользовательских классов. Этот метод может включать необязательный параметр modulo, который позволяет выполнять возведение в степень по модулю. Этот лайфхак полезен для работы с числовыми данными, особенно в математических и криптографических приложениях.

Метод __ipow__ является специальным методом, который позволяет реализовать операцию возведения в степень с присваиванием. Когда оператор
= применяется к объекту, Python вызывает этот метод, позволяя изменить объект на месте в соответствии с результатом возведения в степень. Если указан параметр modulo, результат операции будет взят по модулю.

Использование метода ipow позволяет легко реализовать операцию возведения в степень с присваиванием для пользовательских классов.

🔗 Python tricks
Эффективное использование метода __imod__(self, other)

Метод imod(self, other) в Python позволяет определить поведение оператора взятия остатка с присваиванием (%=) для пользовательских классов. Это полезно для работы с числовыми данными и структурами, где операции взятия остатка и обновления значений являются обычными задачами.

Метод imod — это специальный метод, который позволяет реализовать операцию взятия остатка с присваиванием. Когда оператор %= применяется к объекту, Python вызывает этот метод, позволяя изменить объект на месте в соответствии с результатом операции.

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

🔗 Python tricks
Protocol

Класс Protocol - это способ формального определения протоколов, введенный в версии 3.8.

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

Сейчас используется в основном в стандартной библиотеке.

На изображении предоставлен пример использования Protocol для определения простого протокола логгирования.

🔗 Python tricks
Метод count()

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

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

Работает для списков, кортежей, строк.

🔗 Python tricks
Эффективное использование метода __iand__(self, other)

Метод iand(self, other) в Python позволяет определить поведение оператора побитовой операции "и" с присваиванием (&=) для пользовательских классов. Этот метод полезен для выполнения битовых операций над данными, которые хранятся в пользовательских объектах.

Метод iand является специальным методом, который позволяет реализовать операцию побитового "и" с присваиванием. Когда оператор &= применяется к объекту, Python вызывает этот метод, позволяя изменить объект на месте в соответствии с результатом операции.

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

🔗 Python tricks
Эффективное использование метода ifloordiv(self, other)

Метод ifloordiv(self, other) в Python позволяет определить поведение оператора целочисленного деления с присваиванием (//=) для пользовательских классов. Это особенно полезно для работы с числовыми данными и структурами, где целочисленное деление и обновление значений являются обычными задачами.

Метод ifloordiv является специальным методом, который позволяет реализовать целочисленное деление с присваиванием. Когда оператор //= применяется к объекту, Python вызывает этот метод, позволяя изменить объект на месте в соответствии с результатом целочисленного деления.

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

🔗 Python tricks
del

del – это оператор, который используется для удаления объектов. Он может применяться к элементам списка, срезам списка, переменным, атрибутам и элементам словаря. В контексте списков, del используется для удаления элементов или срезов из списка по индексу или диапазону индексов.

🔗 Python tricks
list.clear

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

🔗 Python tricks
Эффективное использование метода __imatmul__(self, other)

Метод imatmul(self, other) в Python позволяет определить поведение оператора матричного умножения с присваиванием (@=) для пользовательских классов. Это полезно для работы с матрицами и другими структурами данных, поддерживающими матричное умножение, делая код более выразительным и эффективным.

Метод imatmul — это специальный метод, который позволяет реализовать матричное умножение с присваиванием. Когда оператор @= применяется к объекту, Python вызывает этот метод, позволяя изменить объект на месте в соответствии с результатом матричного умножения.

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

🔗 Python tricks
Реализация операции вычитания на месте для пользовательского класса

Метод isub в Python используется для реализации операции вычитания на месте (оператора -=). Этот метод позволяет изменять объект "на месте", что может быть полезно для оптимизации производительности и управления памятью.

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

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

🔗 Python tricks
Расширение возможности операции побитового исключающего "или" для пользовательских объектов

Метод rxor в Python используется для реализации операции побитового исключающего "или" (оператора ^), когда операнд слева не поддерживает соответствующий метод xor. Этот метод полезен для работы с пользовательскими объектами, когда требуется поддерживать операцию побитового исключающего "или" с различными типами данных.

Рассмотрим пример, в котором у нас есть класс, представляющий пользовательские битовые данные, и мы хотим поддерживать операцию побитового исключающего "или" как с обычными числами Python (int), так и с другими экземплярами нашего класса.

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

🔗 Python tricks
Сравнение быстродействия def и lambda-функций Python. Производные функции

Иными словами — функция второго уровня вложенности служит для многократного вызова и создания во время каждого функции третьего уровня вложенности.

🔗 Python tricks
Сравнение быстродействия def и lambda-функций Python. Производные функции

А производная для функции построения графика — это же самая функция с определенными аргументами.

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

Вернёмся к первому. В случае проверки скорости создания функции, функция_для_замера() будет иметь одну цель — создать внутри себя def или lambda функцию. Её мы будем вызывать множество раз, и каждый раз она будет создавать одну и ту же функцию заново.

🔗 Python tricks
Сравнение быстродействия def и lambda-функций Python. Производные функции

Слабонервным людям, ненавидящим многоуровневые вложения, не читать.

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

🔗 Python tricks
sorted

Функция sorted() возвращает отсортированный список элементов из указанного итерируемого объекта. Она не изменяет исходный объект, а возвращает новый отсортированный список. По умолчанию сортировка происходит по возрастанию, но с помощью параметра reverse=True можно изменить направление на убывание.

🔗 Python tricks
math.fabs

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

🔗 Python tricks
Сравнение быстродействия def и lambda-функций Python. Функции для упрощения жизни

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

🔗 Python tricks
Сравнение быстродействия def и lambda-функций Python. Общие функции

Всего у нас будет 2 диаграммы: полная и усредненная. В каждой по 2 графика: для def и lambda функций. Всего нам потребуется 4 черепахи.
Список значений для 1 и 2 графика очевиден — несколько результатов выполнения замера скорости. С 3 и 4 всё сложнее — нужно найти среднее арифметическое одного из 2 первых графиков.

Дабы слишком не заморачиваться над тем, чтобы график никуда не вылезал, найдём разницу между каждым элементом каждого графика и средним значением между средними арифметическими из 1 и 2 графика. В итоге, на графике мы будем видеть не общее значение, а разницу.

🔗 Python tricks
Сравнение быстродействия def и lambda-функций Python. Общие функции

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

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

🔗 Python tricks
Конкатенация строк

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

Более эффективный подход к решению этой задачи заключается в использовании функции join()

🔗 Python tricks