Python School
82.6K subscribers
2.39K photos
7 videos
566 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official

РКН: clck.ru/3G6pBb
加入频道
Как проверить, что один кортеж содержит все элементы другого кортежа

Для проверки того, содержит ли один кортеж все элементы другого кортежа в Python, можно воспользоваться встроенной функцией all(), передав ей выражение генератора списков, которое проверяет наличие каждого элемента из второго кортежа в первом кортеже.
Что такое @classmethod, @staticmethod, @property

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

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

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

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

Запуск Python может занимать длительное время на компьютерах с операционной системой Windows по нескольким причинам. Вот некоторые из них:

Перезагрузка компьютера может занять длительное время и затормозить работу Python;

Некоторые антивирусные программы и брандмауэры могут занимать ресурсы и замедлять выполнение команд в Python;

Операционная система Windows может использовать много ресурсов, когда запускаются приложения, и это может сказаться на производительности Python;

Зависимости и модули Python, которые используются в приложении, могут занимать много времени на импорт и загрузку;

Неэффективный код Python может приводить к значительным задержкам и замедлениям;

Другие приложения, работающие на компьютере, могут занимать много времени на выполнение задач и затруднять работу Python;
Как работать с транзитивными зависимостями

Для работы с транзитивными зависимостями можно использовать систему управления зависимостями, например, pipenv, poetry или pip. Эти системы позволяют устанавливать зависимости и их транзитивные зависимости, а также контролировать версии зависимостей.
Объясните, что такое monkey patching и приведите пример

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

Это возможно из-за того, что Python имеет функцию под названием «name mangling», которая изменяет имена атрибутов класса или методов путем добавления двойного подчеркивания «__» в начале их имен. Это сделано для того, чтобы предотвратить случайное переименование атрибутов в подклассах, которые будут унаследованы суперклассом.
Что такое магические методы dunder

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

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

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

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

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

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

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

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

В качестве Питоновского конструктора выступает метод init()
Методы сравнения объектов между собой (ч.1)

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

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

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

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

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

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

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

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

Метод eq(self, other) предназначен для определения поведения оператора сравнения "==" для объектов определенного класса. Этот метод позволяет сравнивать два объекта и определять, равны ли они друг другу.