Python академия
7.73K subscribers
2.32K photos
5 videos
269 links
Python академия. Учи Python быстро и легко. По всем вопросам @evgenycarter
Download Telegram
Как создать namedtuple из словаря в Python

Вы заметили, как мы преобразовали словарь в именованный кортеж с помощью оператора **?

Все, что вам нужно сделать для этого — определить структуру namedtuple и передать словарь (**dict) этому именованному кортежу в качестве аргумента. Единственное требование заключается в том, что ключи словаря должны совпадать с именами полей namedtuple.

Подписывайтесь на канал 👉@pythonofff
👍3
Пишем обратно совместимый код

С помощью пакета six можно писать код, который запустится и на Python 2, и на Python 3. То есть код получается обратно совместимым.

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

Например, в пакете поддерживаются tkinter и urllib.

Подписывайтесь на канал 👉@pythonofff
👍3
Как заменить атрибут в именованном кортеже

Что делать, если значение одного атрибута необходимо изменить?

Вам нужно обновить его в данных. Для этого просто воспользуемся методом ._replace()

Подписывайтесь на канал 👉@pythonofff
👍6
Проверка отношения классов

Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции isinstance(object, classinfo) и issubclass(class, classinfo).

instance - возвращает True, если объект является экземпляром класса либо экземпляром подкласса данного класса.
issubclass — проверяет является ли класс наследником другого класса.

Данные функции зачастую применяются в ООП.

Подписывайтесь на канал 👉@pythonofff
👍6
Что такое метод?

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

Иногда вы можете задаться вопросом, существует ли какой-то метод. В Python можно посмотреть весь список строковых методов, используя функцию dir() со строкой в качестве аргумента.

Подписывайтесь на канал 👉@pythonofff
👍7😐2
Делаем планировщик задач

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

Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще schedule не требует внешних зависимостей и сам в целом легковесный.

Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.

Подписывайтесь на канал 👉@pythonofff
👍7
Sample Project

Sample Project — это пакет-шаблон с файлом setup.py для ручной установки пакета. Файл снабжен аннотациями, касающимися настройки скрипта и среды сборки пакета в целом.

Основан Sample project на пакете setuptools. setup.py — это скрипт сборки для пакетов, созданных с помощью setuptools.

Подписывайтесь на канал 👉@pythonofff
👍2
Получаем и задаем лимит рекурсии

В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает RecursionError во время создания рекурсивных алгоритмов.

Но с помощью модуля sys можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти.

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

Подписывайтесь на канал 👉@pythonofff
👍4
Counter

Объект counter предоставляется библиотекой collections. Давайте поподробнее разберем, что он собой представляет.

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

Счетчик counter позволяет легко вычислить частоту. Он работает не только с числами, но и с любым итерируемыми объектами, такими как строки и списки.

Подписывайтесь на канал 👉@pythonofff
👍6
Конструктор класса

У классов практически во всех языках есть конструкторы — это такие специальные методы, которые вызываются автоматически и инициализируют экземпляр класса.

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

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

Подписывайтесь на канал 👉@pythonofff
👍7
OrderedDict

Словарь — это НЕупорядоченная коллекция пар ключ-значение. Однако OrderedDict поддерживает упорядочивание ключей.

Это в некотором роде подкласс словаря dict.

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

Подписывайтесь на канал 👉@pythonofff
👍2
Хотите опыт и знания, которые помогут вам вырасти профессионально, и ускорить обработку данных в ваших рабочих проектах? 

Тогда пора на 4-й поток онлайн-программы Spark Advanced! 

20 марта NewProLab запускает программу для дата-инженеров, имеющих практический опыт работы с Apache Spark 2 и желающих изучить внутреннюю архитектуру проекта. За 8 занятий в зуме вы узнаете, что у Spark под капотом и сможете выполнить 4 лабы: 

• Разработаете Encoder JSON to Row
• Разработаете коннектор для DataFrame API с использованием Datasource API 
• Добавите поддержку Predicate Pushdown в коннектор
• Добавите поддержку Structured Streaming API в коннектор

Преподаватели NewProLab – эксперты-практики из ведущих компаний России и мира, обучат работать с инструментами и технологиями через решение типичных задач с реальными дата-сетами. Полученные в ходе обучения знания возможно сразу внедрять в рабочие проекты!

Бонус: Получите скидку 23% при покупке программы по промокоду birthday23.

Подробности по ссылке!
👍2
Отсутствующие ключи в словаре

При обращении по отсутствующему ключу в словаре мы получим исключение KeyError. Но мы можем переопределить это поведение.

Для этого создадим свой собственный класс словаря, унаследовавшись от dict. После чего нам просто необходимо переопределить метод __missing__, который вызывается в базовой реализации методом dict.__getitem__ при при адресации к отсутствующему ключу.

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

Подписывайтесь на канал 👉@pythonofff
ChainMap

ChainMap — это контейнерный тип данных, в котором хранится несколько словарей.

Если у вас несколько связанных или похожих словарей, зачастую их можно хранить вместе, в ChainMap.

Распечатать все элементы ChainMap можно при помощи .map

Подписывайтесь на канал 👉@pythonofff
👍7
Работаем с файловыми путями

В стандартной библиотеке есть максимально удобный пакет pathlib для простой работы с файловыми путями.

Для представления пути к файлу есть класс Path, с объектами которого уже можно производить операции. Например, методы exists() и is_dir() проверяют, существует ли файл и является ли он директорией.

Но самой классной фичей является замена os.path.join() на более удобный и элегантный вариант с использованием слэшей, как показано на картинке.

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

Подписывайтесь на канал 👉@pythonofff
👍4
Сортировка с помощью OrderedDict

Сортировка элементов, например, по возрастанию значений, может помочь в анализе данных. Давайте посмотрим, что мы можем сделать.

Сортировка элементов по ключу KEY (в порядке возрастания)

Подписывайтесь на канал 👉@pythonofff
👍3
Разбиение строки на список

У строк есть метод split(), который разбивает их по указанному разделителю и возвращает список из отдельных строк.

В качестве аргументов можно передать два значения: сам разделитель (по умолчанию знак пробела) и максимальное количество разделений.

Например, с помощью этого метода можно запросто разделить текст на отдельные слова, передав знак пробела в качестве разделителя.

Подписывайтесь на канал 👉@pythonofff
👍62
Что происходит, когда вы удаляете и повторно вставляете ключи в OrderedDict

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

Подписывайтесь на канал 👉@pythonofff
👍2
Флаги явного преобразования

Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием.

Это поле можно использовать для переопределения поведения format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:

!r — преобразует значение в строку, используя функцию repr().
!s — преобразует значение в строку, используя функцию str().

В примере, в случае с флагом !r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s — без кавычек (в более удобном для чтения виде).

Подписывайтесь на канал 👉@pythonofff
👍5
Что происходит, когда у нас есть избыточные ключи в ChainMap?

Возможно, что 2 словаря содержат один и тот же ключ.

Обратите внимание, что red не повторяется, он печатается только один раз.

Подписывайтесь на канал 👉@pythonofff
👍2