TGViewer
Channel Public Channel
Python академия

Python академия

@pythonofff

Учи Python быстро и легко.

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

✔ Подходит для прокачки навыков кодирования.

По всем вопросам @evgenycarter
Subscribers
7.13K
Photos
2.6K
Videos
4
Links
459

Showing posts older than #3437 · Back to latest

Older Posts 20 shown
Post #3432 1.16K
Работаем с файловыми путями

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

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • ❤ 2
  • 👍 1
Post #3430 1.23K
ChainMap

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • 🔥 1
Post #3428 1.22K
Отсутствующие ключи в словаре

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • ❤ 2
  • 👍 1
Post #3426 1.25K
Конструктор класса

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 4
Post #3424 1.18K
Counter

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 4
Post #3422 1.22K
Sample Project

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

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 1
Post #3420 1.6K
Делаем планировщик задач

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 4
Post #3418 1.32K
Операции с zip архивами

Для работы с zip файлами можно использовать встроенный модуль zipfile. Если кто не помнит, то zip файл — это архив, содержащий сжатые файлы.

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

Также этот модуль позволяет создавать свои zip архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию.

Подписывайтесь на канал 👉@pythonofff
  • ❤ 1
Post #3416 1.08K
Проверка отношения классов

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 2
Post #3414 902
Что такое метод?

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

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 4
Post #3413 964
OrderedDict

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 2
Post #3411 1.1K
Аннотация типов

Тайп хинтинг был добавлен в python еще в версии 3.5 вместе с библиотекой typing, в которой содержались структуры нужные для создания дженериков для аннотирования переменных. Тогда синтаксис аннотирования работал при инициализации переменных. В последствии в версии 3.6 эта возможность была расширена и стало возможно объявлять типы переменных вообще в любом месте кода.

В python 3.9 была добавлена возможность использовать в качестве дженериков для аннотирования встроенные коллекции, вместо структур typing'а (List, Dict, Tuple...).

И наконец в 3.10 на замену перечисления возможных принимаемых типов через typing.Union пришел опреатор | (or). Также в 3.10 был изменен синтаксис создания тайпалиасов, чтобы разграничить с присваиванием переменной, теперь лучше это делать непосредственно через TypeAlias.

Подписывайтесь на канал 👉@pythonofff
  • 👍 3
  • ❤ 1
Post #3409 1.23K
Метод join у строк

У строк есть полезный метод str.join(), который принимает на вход итерируемый объект, элементами которого также должны быть строки.

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

Проще говоря, если применить к строке этот метод, то она станет разделителем для элементов в новой строке.

Подписывайтесь на канал 👉@pythonofff
  • 👍 2
Post #3407 1.18K
Пасхалка

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

Но будет вызвано исключение, которое говорит "not a chance", что означает "ни единого шанса". Однако есть ещё один интересный момент, а именно — исходный код этого модуля.

Оказывается, интерпретатор CPython сначала запускает файл future.c, когда встречается импорт этого модуля.

Подписывайтесь на канал 👉@pythonofff
  • 👍 4
Post #3405 1.14K
Defaultdict

Словарь представляет из себя неупорядоченный набор ключей и значений.

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 3
Post #3403 1.26K
Валидаторы данных

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

Модуль validators позволяет использовать уже готовые валидаторы для самых распространенных задач. В примере можете как раз увидеть валидацию почты и ссылок.

Помимо этого, validators позволяет также работать с ipv4, ipv6, mac адресами и многим другим. В итоге, имеем лаконичный и простой модуль с хорошим функционалом.

Подписывайтесь на канал 👉@pythonofff
  • 👍 4
Post #3401 1.09K
Список импортов по умолчанию

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

Таким образом, при импорте вида from module import * из модуля c подобной записью подключатся только объекты с названиями из списка __all__.

Тем не менее, в примере выше импортировать функцию foo из такого модуля всё ещё можно, например, с помощью записи from module import foo.

Подписывайтесь на канал 👉@pythonofff
  • 👍 3
Post #3399 1.15K
Копируем объекты

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

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

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 5
Post #3397 1.13K
Шаблоны строк для форматирования

Класс Template из пакета string в стандартной библиотеке позволяет вполне удобно создавать шаблоны строк для дальнейшего форматирования.

Такой способ появился ещё в Python 2.4, как замена %-форматированию, но популярным так и не стал. Он поддерживает передачу значений по имени и использует $-синтаксис как в PHP.

В новых проектах, конечно, используются чаще всего f-строки и иногда метод format, но всё же о Template стоит хотя бы знать на случай, если придется работать с легаси кодом.

Подписывайтесь на канал 👉@pythonofff
  • 👍 4
  • ❤ 2
Post #3395 1.12K
Дизассемблирование

При запуске программы на python, написанный код преобразуется в байт-код, который затем может быть запущен в интерпретаторе Python. Встроенный модуль dis позволяет дизассемблировать байт-код в удобное представление для просмотра его инструкций. Полный спсиок инструкций байт-кода с описанием можно посмотреть здесь.

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

Подписывайтесь на канал 👉@pythonofff
  • 👍 2
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →