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

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

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

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Перечисление

Функция enumerate() добавляет счетчик к итерируемому объекту и возвращает его в виде объекта перечисления.

Этот перечисляемый объект затем может быть использован непосредственно для циклов или преобразован в список кортежей с помощью функции list().

🔗 Python tricks
Forwarded from CyberYozh
Обзор Bespalephone rugged 0.4
Евгений Ивченков

🌐 Смотреть обзор [19:09]

К нам в руки попала актуальная модель BespalePhone. Это пятая версия телефона и четвертая версия прошивки от команды Bespale.

Все, что вам нужно знать о телефоне, можно выразить в одном предложении: «Защита от досмотра, влаги и пыли». Однако такого набора возможностей прошивки вы не встретите в One+ или Pixel.

📦 Вторая хорошая новость: вы можете стать обладателем такого смартфона бесплатно.

С 13 по 23 мая пройдет розыгрыш BespalePhone (как в обзоре) и нескольких дополнительных призов. Все, что вам нужно будет сделать, — быть подписанным на наш канал и на канал BespalePhone. Подробности завтра 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
Как начать отладку при утечке памяти в рабочем приложении

Для отладки утечек памяти в 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
NumPy: Срезы

Срезы (slicing) — это способ выбора подмножества элементов из массива. Ты можешь использовать срезы для доступа к определенным элементам массива или для изменения значений в массиве. Результат включает начальный индекс, но исключает конечный индекс.

🔗 Python tricks
Создание и удаление объектов

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

new(cls[, ...]) — метод создания типа класса. Он принимает первым аргументом тип класса, в котором он вызывается, и, как правило, возвращает этот же тип. В основном используется, чтобы настраивать создание экземпляра класса тех объектов, которые наследуются от неизменяемых типов (например, int, str, или tuple).

init(self[, ...]) — конструктор класса. Используется при определении объектов.

init_subclass(cls) — позволяет переопределить создание подклассов объекта.

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

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

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

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

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

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

🔗 Python tricks
NumPy: copy

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

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

Метод le(self, other) позволяет определить, каким образом объект вашего класса должен вести себя, когда сравнивается с другим объектом с помощью оператора "<=". Например, если вы хотите сравнивать объекты вашего класса по каким-то определенным критериям (например, по их атрибутам), вы можете переопределить метод le(self, other) таким образом, чтобы он возвращал True, если объект self меньше или равен объекту other в соответствии с этими критериями, и False в противном случае.

🔗 Python tricks
Дан целочисленный массив nums, поверните массив вправо на k шагов.

reverse принимает nums и переворачивает элементы списка между индексами i и j, затем элементов с индексами i+1 и j-1, и так далее, пока индексы не встретятся посередине. Этот процесс продолжается до тех пор, пока левый индекс меньше правого индекса.

rotate принимает nums и число шагов поворота k и поворачивает список на k шагов вправо. Это достигается путем выполнения трех операций переворота: сначала переворачивается левая часть списка (от начала до
len(nums) - k - 1), затем правая часть списка (от len(nums) - k до конца), и, наконец, весь список целиком.
Эти три операции переворота вместе приводят к повороту списка на k шагов вправо.

🔗 Python tricks
Классы данных

Data classes
- это одна из новых функций Python 3.7. Благодаря data classes вам не нужно писать шаблонный код, чтобы получить правильную инициализацию, представление и сравнения для ваших объектов.

Здесь мы используем декоратор dataclass для того, чтобы автоматически сгенерировать методы __init__() и __repr__().
Теперь экземпляр класса Point имеет красивое строковое представление благодаря автоматически сгенерированному методу __repr__(). Также мы можем обращаться к полям x и y напрямую.

🔗 Python tricks
Переопределение

Сейчас у нас и кошка, и собака просто "издают животные звуки", а хотелось бы, конечно, слышать звуки, свойственные именно этим животным. Для этого существует механика переопределения. Достаточно объявить в классе-наследнике метод с тем же названием, что и в базовом классе.

🔗 Python tricks
Атрибуты объекта

Атрибуты класса могут быть динамическими и статическими. На уровне объекта они инициализируются так.

🔗 Python tricks
NumPy: shape

Функция shape используется для получения размерности массива. Она возвращает кортеж, показывающий количество элементов в каждом измерении массива. Например, если у тебя есть массив arr размером (3, 4), то arr.shape вернет (3, 4), указывая на то, что у массива три строки и четыре столбца.

🔗 Python tricks
Linux как секс!

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

В канале BashDays ты найдешь лучшие Linux и Bash практики. Действующий девопс-инженер, самобытно и с долей юмора, травит темы:

- Рекавери файлов через grep
- Почему коты гадят в макбуки
- Как отключить логирование
- Неочевидные трюки на Bash
- Сниффер SSH на strace

И это только цветочки. А если заскучал, поиграй с друзьями в piu-piu и надери им бэкенд. Рекомендую!

В BashDays даже джуны становятся сеньорами.

Подписывайся, это самый простой способ прокачать свои хард-скиллы: — @bashdays
Методы сравнения объектов между собой (ч.1)

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

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

🔗 Python tricks
NumPy: reshape

reshape() — это функция библиотеки NumPy, которая используется для изменения формы массива без изменения его данных. Она позволяет переформатировать массив в новую форму, указанную в аргументе функции. Например, если у тебя есть одномерный массив из 12 элементов, ты можешь использовать reshape() для преобразования его в двумерный массив размером 3x4 или 4x3.

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

Метод le(self, other) позволяет определить, каким образом объект вашего класса должен вести себя, когда сравнивается с другим объектом с помощью оператора "<=". Например, если вы хотите сравнивать объекты вашего класса по каким-то определенным критериям (например, по их атрибутам), вы можете переопределить метод le(self, other) таким образом, чтобы он возвращал True, если объект self меньше или равен объекту other в соответствии с этими критериями, и False в противном случае.

🔗 Python tricks
Pandas: dropna

Метод dropna() используется в pandas для удаления строк или столбцов, содержащих пропущенные значения (NaN). По умолчанию метод dropna() возвращает новый DataFrame и не меняет исходный. Если ты хочешь изменить исходный DataFrame, используй аргумент inplace = True.

🔗 Python tricks