Defaultdict
Словарь представляет из себя неупорядоченный набор ключей и значений.
В парах ключ:значение ключи должны быть уникальны и неизменяемы. Поэтому список не может быть ключом словаря, так как он изменяемый.
Подписывайтесь на канал 👉@pythonofff
Словарь представляет из себя неупорядоченный набор ключей и значений.
В парах ключ:значение ключи должны быть уникальны и неизменяемы. Поэтому список не может быть ключом словаря, так как он изменяемый.
Подписывайтесь на канал 👉@pythonofff
👍8
Пасхалка
Модуль
Но будет вызвано исключение, которое говорит "not a chance", что означает "ни единого шанса". Однако есть ещё один интересный момент, а именно — исходный код этого модуля.
Оказывается, интерпретатор CPython сначала запускает файл future.c, когда встречается импорт этого модуля. А само это исключение реализовано на этой строчке.
Подписывайтесь на канал 👉@pythonofff
Модуль
__future__
позволяет подключать функционал из будущих версий языка. Например, можно попробовать импортировать фигурные скобки как в си-подобных языках.Но будет вызвано исключение, которое говорит "not a chance", что означает "ни единого шанса". Однако есть ещё один интересный момент, а именно — исходный код этого модуля.
Оказывается, интерпретатор CPython сначала запускает файл future.c, когда встречается импорт этого модуля. А само это исключение реализовано на этой строчке.
Подписывайтесь на канал 👉@pythonofff
👍4
Чем defaultdict отличается от простого словаря?
Если вы попытаетесь получить доступ к ключу, которого нет в словаре, он выдаст ошибку
Если вы попробуете обратиться к отсутствующему ключу,
Синтаксис будет следующим:
При обращении к отсутствующему ключу функция
Подписывайтесь на канал 👉@pythonofff
Если вы попытаетесь получить доступ к ключу, которого нет в словаре, он выдаст ошибку
KeyError
. В то время как при использовании defaultdict
такой ошибки не будет.Если вы попробуете обратиться к отсутствующему ключу,
defaultdict
просто вернет значение по умолчанию.Синтаксис будет следующим:
defaultdict(default_factory)
.При обращении к отсутствующему ключу функция
default_factory
вернет значение по умолчанию.Подписывайтесь на канал 👉@pythonofff
👍5
Метод join у строк
У строк есть полезный метод
Как результат получаем новую строку, которая является объединением всех элементов. При этом они разделены строкой, к которой изначально применялся метод.
Проще говоря, если применить к строке этот метод, то она станет разделителем для элементов в новой строке.
Подписывайтесь на канал 👉@pythonofff
У строк есть полезный метод
str.join()
, который принимает на вход итерируемый объект, элементами которого также должны быть строки.Как результат получаем новую строку, которая является объединением всех элементов. При этом они разделены строкой, к которой изначально применялся метод.
Проще говоря, если применить к строке этот метод, то она станет разделителем для элементов в новой строке.
Подписывайтесь на канал 👉@pythonofff
👍8
Аннотация типов
Тайп хинтинг был добавлен в python еще в версии 3.5 вместе с библиотекой
В python 3.9 была добавлена возможность использовать в качестве дженериков для аннотирования встроенные коллекции, вместо структур
И наконец в 3.10 на замену перечисления возможных принимаемых типов через
Подписывайтесь на канал 👉@pythonofff
Тайп хинтинг был добавлен в python еще в версии 3.5 вместе с библиотекой
typing
, в которой содержались структуры нужные для создания дженериков для аннотирования переменных. Тогда синтаксис аннотирования работал при инициализации переменных. В последствии в версии 3.6 эта возможность была расширена и стало возможно объявлять типы переменных вообще в любом месте кода.В python 3.9 была добавлена возможность использовать в качестве дженериков для аннотирования встроенные коллекции, вместо структур
typing'а
(List, Dict, Tuple.
..).И наконец в 3.10 на замену перечисления возможных принимаемых типов через
typing.Union
пришел опреатор | (or). Также в 3.10 был изменен синтаксис создания тайпалиасов, чтобы разграничить с присваиванием переменной, теперь лучше это делать непосредственно через TypeAlias
.Подписывайтесь на канал 👉@pythonofff
👍8
OrderedDict
Словарь — это НЕупорядоченная коллекция пар ключ-значение. Однако OrderedDict поддерживает упорядочивание ключей.
Это в некотором роде подкласс словаря dict.
Давайте создадим обычный словарь и сделаем его OrderedDict, чтобы показать, в чем заключается разница.
Подписывайтесь на канал 👉@pythonofff
Словарь — это НЕупорядоченная коллекция пар ключ-значение. Однако OrderedDict поддерживает упорядочивание ключей.
Это в некотором роде подкласс словаря dict.
Давайте создадим обычный словарь и сделаем его OrderedDict, чтобы показать, в чем заключается разница.
Подписывайтесь на канал 👉@pythonofff
👍2
Операции с zip архивами
Для работы с zip файлами можно использовать встроенный модуль zipfile. Если кто не помнит, то zip файл — это архив, содержащий сжатые файлы.
Просмотреть содержимое архива можно с помощью функции printdir, а извлечь все файлы можно вызвав extractfile.
Также этот модуль позволяет создавать свои zip архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию.
Подписывайтесь на канал 👉@pythonofff
Для работы с zip файлами можно использовать встроенный модуль zipfile. Если кто не помнит, то zip файл — это архив, содержащий сжатые файлы.
Просмотреть содержимое архива можно с помощью функции printdir, а извлечь все файлы можно вызвав extractfile.
Также этот модуль позволяет создавать свои zip архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию.
Подписывайтесь на канал 👉@pythonofff
👍4
Как создать namedtuple из словаря в Python
Вы заметили, как мы преобразовали словарь в именованный кортеж с помощью оператора **?
Все, что вам нужно сделать для этого — определить структуру namedtuple и передать словарь (**dict) этому именованному кортежу в качестве аргумента. Единственное требование заключается в том, что ключи словаря должны совпадать с именами полей namedtuple.
Подписывайтесь на канал 👉@pythonofff
Вы заметили, как мы преобразовали словарь в именованный кортеж с помощью оператора **?
Все, что вам нужно сделать для этого — определить структуру namedtuple и передать словарь (**dict) этому именованному кортежу в качестве аргумента. Единственное требование заключается в том, что ключи словаря должны совпадать с именами полей namedtuple.
Подписывайтесь на канал 👉@pythonofff
👍3
Пишем обратно совместимый код
С помощью пакета six можно писать код, который запустится и на Python 2, и на Python 3. То есть код получается обратно совместимым.
Для этого в пакете есть все типы, функции и некоторые модули стандартной библиотеки, которые под капотом работают по-разному в зависимости от версии языка.
Например, в пакете поддерживаются tkinter и urllib.
Подписывайтесь на канал 👉@pythonofff
С помощью пакета six можно писать код, который запустится и на Python 2, и на Python 3. То есть код получается обратно совместимым.
Для этого в пакете есть все типы, функции и некоторые модули стандартной библиотеки, которые под капотом работают по-разному в зависимости от версии языка.
Например, в пакете поддерживаются tkinter и urllib.
Подписывайтесь на канал 👉@pythonofff
👍3
Как заменить атрибут в именованном кортеже
Что делать, если значение одного атрибута необходимо изменить?
Вам нужно обновить его в данных. Для этого просто воспользуемся методом ._replace()
Подписывайтесь на канал 👉@pythonofff
Что делать, если значение одного атрибута необходимо изменить?
Вам нужно обновить его в данных. Для этого просто воспользуемся методом ._replace()
Подписывайтесь на канал 👉@pythonofff
👍6
Проверка отношения классов
Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции isinstance(object, classinfo) и issubclass(class, classinfo).
instance - возвращает True, если объект является экземпляром класса либо экземпляром подкласса данного класса.
issubclass — проверяет является ли класс наследником другого класса.
Данные функции зачастую применяются в ООП.
Подписывайтесь на канал 👉@pythonofff
Для того, чтобы проверить отношения двух классов или экземпляров (является ли класс классом наследником), есть две простые встроенные функции isinstance(object, classinfo) и issubclass(class, classinfo).
instance - возвращает True, если объект является экземпляром класса либо экземпляром подкласса данного класса.
issubclass — проверяет является ли класс наследником другого класса.
Данные функции зачастую применяются в ООП.
Подписывайтесь на канал 👉@pythonofff
👍6
Что такое метод?
Метод — это такая функция, которую можно использовать для определенного типа данных. Существуют строковые методы, методы для работы с целыми числами, методы списков, словарей и т.д. Методы могут принимать или не принимать аргументы. В целом, это методы — это встроенные функции, которые делают вашу жизнь намного проще.
Иногда вы можете задаться вопросом, существует ли какой-то метод. В Python можно посмотреть весь список строковых методов, используя функцию dir() со строкой в качестве аргумента.
Подписывайтесь на канал 👉@pythonofff
Метод — это такая функция, которую можно использовать для определенного типа данных. Существуют строковые методы, методы для работы с целыми числами, методы списков, словарей и т.д. Методы могут принимать или не принимать аргументы. В целом, это методы — это встроенные функции, которые делают вашу жизнь намного проще.
Иногда вы можете задаться вопросом, существует ли какой-то метод. В Python можно посмотреть весь список строковых методов, используя функцию dir() со строкой в качестве аргумента.
Подписывайтесь на канал 👉@pythonofff
👍7😐2
Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет schedule, который позволяет планировать задачи и повторять их через промежуток времени.
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще schedule не требует внешних зависимостей и сам в целом легковесный.
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
Подписывайтесь на канал 👉@pythonofff
К моему удивлению, далеко не все знают про пакет schedule, который позволяет планировать задачи и повторять их через промежуток времени.
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще schedule не требует внешних зависимостей и сам в целом легковесный.
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
Подписывайтесь на канал 👉@pythonofff
👍7
Sample Project
Sample Project — это пакет-шаблон с файлом setup.py для ручной установки пакета. Файл снабжен аннотациями, касающимися настройки скрипта и среды сборки пакета в целом.
Основан Sample project на пакете setuptools. setup.py — это скрипт сборки для пакетов, созданных с помощью setuptools.
Подписывайтесь на канал 👉@pythonofff
Sample Project — это пакет-шаблон с файлом setup.py для ручной установки пакета. Файл снабжен аннотациями, касающимися настройки скрипта и среды сборки пакета в целом.
Основан Sample project на пакете setuptools. setup.py — это скрипт сборки для пакетов, созданных с помощью setuptools.
Подписывайтесь на канал 👉@pythonofff
👍2
Получаем и задаем лимит рекурсии
В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает RecursionError во время создания рекурсивных алгоритмов.
Но с помощью модуля sys можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти.
И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
Подписывайтесь на канал 👉@pythonofff
В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает RecursionError во время создания рекурсивных алгоритмов.
Но с помощью модуля sys можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти.
И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
Подписывайтесь на канал 👉@pythonofff
👍4
Counter
Объект counter предоставляется библиотекой collections. Давайте поподробнее разберем, что он собой представляет.
К примеру, у вас есть список каких-то случайных чисел. Что, если вы хотите узнать, сколько раз встречается каждое число?
Счетчик counter позволяет легко вычислить частоту. Он работает не только с числами, но и с любым итерируемыми объектами, такими как строки и списки.
Подписывайтесь на канал 👉@pythonofff
Объект counter предоставляется библиотекой collections. Давайте поподробнее разберем, что он собой представляет.
К примеру, у вас есть список каких-то случайных чисел. Что, если вы хотите узнать, сколько раз встречается каждое число?
Счетчик counter позволяет легко вычислить частоту. Он работает не только с числами, но и с любым итерируемыми объектами, такими как строки и списки.
Подписывайтесь на канал 👉@pythonofff
👍6
Конструктор класса
У классов практически во всех языках есть конструкторы — это такие специальные методы, которые вызываются автоматически и инициализируют экземпляр класса.
В Python конструкторы в классах имеют название __init__(), и их почти всегда переопределяют. Делается это для того, чтобы назначить свойства объекту и выполнить предварительные действия.
Первым аргументом конструктор всегда принимает объект класса, который обозначается как self.
Подписывайтесь на канал 👉@pythonofff
У классов практически во всех языках есть конструкторы — это такие специальные методы, которые вызываются автоматически и инициализируют экземпляр класса.
В Python конструкторы в классах имеют название __init__(), и их почти всегда переопределяют. Делается это для того, чтобы назначить свойства объекту и выполнить предварительные действия.
Первым аргументом конструктор всегда принимает объект класса, который обозначается как self.
Подписывайтесь на канал 👉@pythonofff
👍7
OrderedDict
Словарь — это НЕупорядоченная коллекция пар ключ-значение. Однако OrderedDict поддерживает упорядочивание ключей.
Это в некотором роде подкласс словаря dict.
Давайте создадим обычный словарь и сделаем его OrderedDict, чтобы показать, в чем заключается разница.
Подписывайтесь на канал 👉@pythonofff
Словарь — это НЕупорядоченная коллекция пар ключ-значение. Однако 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.
Подробности по ссылке!
Тогда пора на 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
При обращении по отсутствующему ключу в словаре мы получим исключение KeyError. Но мы можем переопределить это поведение.
Для этого создадим свой собственный класс словаря, унаследовавшись от dict. После чего нам просто необходимо переопределить метод __missing__, который вызывается в базовой реализации методом dict.__getitem__ при при адресации к отсутствующему ключу.
Мы можем, например, возвращать какое-то дефолтное значение, либо определить любую другую необходимую логику поведения.
Подписывайтесь на канал 👉@pythonofff