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

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

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

Канал сотрудничает с рекламным сервисом @Tgpodbor_official
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Программирование сейчас - один из немногих социальных лифтов, доступных всем!

Лучший способ начать свой путь в IT - изучать Python. Этот язык не такой сложный для изучения, однако на нем создают сайты, чат-боты и даже искусственный интеллект. Например, Netflix, YouTube и Google написаны на этом языке.

С нуля стать опытным разработчиком со средней зарплатой в 180 000 рублей можно в онлайн-школе Product Star на курсе “Профессия: Python-разработчик”. Курс создан специалистами из топовых компаний с реальным опытом в индустрии, благодаря чему в процессе обучения вы будете погружаться в реальные кейсы.

После обучения ваше портфолио пополнится проектами, которые будет не стыдно показать любому работодателю. И самое главное: Product Star гарантируют трудоустройство, а если в процессе поймете, что специальность не для вас, вам вернут деньги.

Станьте Python-разработчиком вместе с ProductStar. Скидка до 57% и техническое собеседование с топовым разработчиком в подарок - https://tglink.io/2f3f4a508b0a

Реклама. ООО "ТРИВИУМ". ИНН 7806297293.
Общие свойства объектов (ч.1)

Любой объект может содержать дополнительную информацию, полезную при отладке или приведении типов.

repr(self) — информационная строка об объекте. Выводится при вызове функции repr(...) или в момент отладки.
Tuple

Кортеж представляет из себя массив фиксированной длины, заданной при создании объекта. Элементами кортежа также могут быть объекты любых типов. В отличие от списка, кортеж в памяти представлен одним объектом. Поскольку нет изменяемой части, которую надо перемещать между блоками. Да, и методов для изменения элементов у кортежа так же нет. Но если сам элемент принадлежит к изменяемому типу, его все же можно изменить.
Dict

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

Как и списки, словари хранятся в виде двух объектов. Первый, содержит информацию о самом словаре и всегда остается в одном и том же блоке. Второй, хранит пары ключ-значение и может перемещаться между блоками при изменении размера. Но при этом пустой словарь занимает гораздо больше места.
Генераторные фунции (generator functions)

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

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

Любой объект может содержать дополнительную информацию, полезную при отладке или приведении типов.

repr(self) — информационная строка об объекте. Выводится при вызове функции repr(...) или в момент отладки.
Общие свойства объектов (ч.2)

str(self) — вызывается при вызове функции str(...), возвращает строковый объект.
Наследование

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

Мы все прекрасно знаем, что котики, к примеру, любят всё ронять, а собакены — рыть землю. Создадим два соответствующих класса-наследника.

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

Этот код вызывает ошибку утверждения assert с сообщением «error», если debug равен True. debug — это встроенная переменная Python, которая является истинной, если к интерактивной консоли или скрипту был присоединен флаг оптимизации -O. Для типичных скриптов в режиме отладки эта переменная равна True. Если оптимизация включена, то интерпретатор Python игнорирует все операторы утверждения assert, поэтому этот код не вызовет ошибку в optimized mode.

Такой код может быть использован для проверки инвариантов в программе или для отладки кода. Если утверждение не выполняется и вызывается AssertionError, это означает, что в программе произошло что-то непредвиденное, что нарушило заданное утверждение, и программа остановится с сообщением об ошибке.
Создание последовательностей (ч.1)

В данном примере класс CustomList содержит метод len(self), который возвращает длину списка self.items, используемого внутри объекта. Когда мы вызываем функцию len(my_list) для объекта my_list, вызывается метод my_list.len(), который возвращает текущую длину списка.

Этот лайфхак полезен при создании собственных коллекций или структур данных в Python. Переопределение метода len позволяет определить, как будет интерпретироваться длина вашего объекта, что может быть полезно для более удобного использования и работы с вашими собственными типами данных.
Создание последовательностей (ч.2)

getitem(self, key) — вызывается при обращении к элементу в последовательности по его ключу (индексу). Метод должен выбрасывать исключение TypeError, если используется некорректный тип ключа, KeyError, если данному ключу не соответствует ни один элемент в последовательности.
Создание последовательностей (ч.3)

setitem(self, key, value) — вызывается при присваивании какого-либо значения элементу в последовательности. Также может выбрасывать исключения TypeError и KeyError.
Создание последовательностей (ч.4)

В данном примере класс CustomDict реализует метод delitem(self, key), который позволяет удалять элементы из словаря, используемого внутри объекта. Когда мы используем оператор del my_dict['b'], вызывается метод my_dict.delitem('b'), который удаляет элемент с ключом 'b' из словаря _data.

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

В данном примере класс DefaultDict наследует функционал от класса dict и переопределяет метод missing(self, key). Этот метод вызывается, когда происходит попытка получить значение по ключу, который отсутствует в словаре.

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

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

В данном примере класс Squares реализует метод iter(self), который возвращает итератор. Итератор - это объект, который поддерживает метод next() и используется для итерации по последовательности значений. Когда мы используем цикл for для объекта squares, интерпретатор Python вызывает метод iter для получения итератора, а затем последовательно вызывает метод next до тех пор, пока не будет возбуждено исключение StopIteration.

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

Этот лайфхак полезен при создании собственных итерируемых объектов в Python, что позволяет использовать их в стандартных итерационных конструкциях и управлять процессом итерации с помощью методов iter и next.
Создание последовательностей (ч.7)

В данном примере класс CustomList реализует метод reversed(self), который возвращает обратный итератор для списка self.items. Этот метод используется при вызове встроенной функции reversed() для объекта CustomList, что позволяет итерироваться по элементам списка в обратном порядке.

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

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

В данном примере класс CustomList определяет метод contains(self, item), который проверяет наличие элемента item в списке self.items. При использовании оператора in для объекта CustomList, вызывается метод contains, который возвращает True, если элемент найден в списке, и False, если элемент отсутствует.

Этот лайфхак полезен для создания пользовательских коллекций или структур данных, которые могут поддерживать проверку наличия элементов посредством оператора in. Переопределение метода contains позволяет определить, как будет работать проверка наличия элементов в вашем объекте, что может быть полезно для удобства использования вашей структуры данных в Python.
Унарные операторы (ч.1)

В данном примере класс Number реализует метод neg(self), который переопределяет оператор отрицания - для объектов этого класса. Когда мы используем оператор отрицания для объекта num, Python вызывает метод neg для этого объекта, который возвращает новый объект Number с отрицательным значением атрибута value.

Этот лайфхак полезен для создания объектов, которые могут поддерживать математические операции с помощью перегрузки операторов в Python. Переопределение метода neg позволяет определить поведение объекта при использовании оператора отрицания, что может быть полезно при работе с числами или другими данными, где операция отрицания имеет смысл.
Унарные операторы (ч.2)

Метод pos(self) в Python вызывается при использовании унарного оператора плюс (+) для объекта. Он позволяет определить поведение объекта при применении унарного плюса к нему.

В данном примере метод pos просто возвращает сам объект без изменений. Это позволяет объекту сохранять своё значение при использовании унарного плюса. Несмотря на то, что в этом примере метод pos не вносит никаких изменений, он может быть полезен для реализации специфического поведения в других контекстах.
Унарные операторы (ч.3)

Метод abs(self) вызывается при использовании встроенной функции abs() для объекта. Он позволяет определить поведение объекта при вычислении его абсолютного значения.

В примере выше метод abs просто вызывает встроенную функцию abs() для атрибута self.value, что позволяет получить абсолютное значение числа.

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