TGViewer
Channel Public Channel
Python Academy

Python Academy

@python_academy

Python Academy — один канал вместо тысячи учебников

Чат канала: @python_academy_chat

Сотрудничество: @zubar89

Канал включён в перечень РКН: https://rkn.link/TVu
Subscribers
44.1K
Photos
1.6K
Videos
2
Links
493

Showing posts older than #709 · Back to latest

Older Posts 20 shown
Post #707 24.2K
Логирование

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

Python поставляется для этих целей с гибким модулем logging. Для создания объекта Logger, вызываем функцию getLogger, передавая в нее имя логера.

Созданный объект Logger предоставляет методы для записи сообщений разного уровня (DEBUG, INFO, WARNING, ERROR, CRITICAL), что удобно для поиска нужной информации с применением фильтров.

По умолчанию в logging задан уровень WARNING, это означает, что сообщения уровня DEBUG и INFO будут игнорироваться при записи в лог. Изменить данное поведение можно с помощью метода setLevel, передав минимальный уровень, который будет отлавливаться.

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

#logging
  • 👍 4
Post #706 36.1K
Яндекс проведет YaTalks — главный ивент для разработчиков

Конференция пройдет 3 и 4 декабря. В первый день — препати, во второй — основная программа. Кроме докладов по актуальным и практическим темам предполагаются и дискуссии — будет, о чем поспорить:

— Романтика vs стабильность: как найти баланс между звёздными целями и ежедневными задачами?
— Женщины в IT: как избавить индустрию от стереотипов?
— Какой путь выбрать: попасть в компанию мечты или создать её самому?
— Как дорасти до топ-менеджера и стоит ли к этому стремиться?

Подробная программа и регистрация на YaTalks по ссылке.
yatalks.yandex.ru YaTalks 2023 — Yandex's premier conference for the IT community On December 5-6, Moscow and Belgrade will host over 100 IT industry experts and scientists delivering technical presentations on development, ML, and giving popular science lectures.
  • 👍 1
Post #705 23.1K
Изменение в контекстных менеджерах

Как вы знаете, для удобного управления жизненным циклом ресурсов в python существуют контекстные менеджеры. Но до недавнего времени, чтобы открыть несколько ресурсов в рамках одной области видимости with нам требовалось либо прописывать их в одну строку либо использовать синтаксис переноса - обратный слеш \ (но это противоречит PEP8).

С выходом python 3.10 появился новый синтаксис, позволяющий в круглых скобках указывать несколько контекстных менеджеров. А также мы можем использовать переменную созданную одним контекстным менеджером в рамках следующего за ним менеджера.

Это стало возможным благодаря появлению нового синтаксического анализатора PEG в python 3.9. И, строго говоря, python 3.9 уже допускал данный синтаксис, хотя официально еще не поддерживался.

#with
  • 👍 2
Post #703 24.6K
Трюк с f-строками

Думаю, про f-строки как метод форматирования все уже знают. Напоминаю, что появились они еще в Python 3.6.

Но им добавили еще одну классную фичу в обновлении 3.8 — можно выводить имя переменной и сразу ее значение, добавив знак равно как показано на картинке.

#строки
  • 👍 5
Post #701 30.3K
Проверяем тип объекта

Раз уж в предыдущем посте затронули модуль inspect, то давайте еще поговорим про некоторые его возможности.

Функции ismodule(), isclass(), ismethod() и isfunction() проверяют переданный объект на то, является ли он модулем, классом, методом или функцией соответственно.

#inspect
  • 👍 4
Post #699 32.2K
Получаем исходный код объекта

Встроенный модуль inspect помогает разработчикам исследовать уже написанные программы.

Сегодня поговорим только про getsource(), который возвращает весь исходный код функции, класса или модуля в виде строки.

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

#inspect
  • 👍 7
Post #697 28.4K
Генерация капчи

Сегодня покажем создание простейшей капчи. Для этого нам понадобится модуль captcha и Pillow, который используется для создание изображений в captcha.

Все максимально просто, за нас по сути все делает уже написанный в модуле код. Создаем объект изображения ImageCaptcha, на который будет нанесен текст. После чего вызываем метод write с заданным текстом и именем файла, в который будет записано изображение.

#captcha
  • 👍 5
Post #695 29.4K
Получение списка имен в объектах

С помощью функции dir() можно получить отсортированный список имен атрибутов и методов, доступных в локальной области. Либо если в функцию передать какой-либо объект dir(object), она вернет список всех имен атрибутов и методов переданного объекта.

Для того, чтобы вручную определить для класса выдачу информации по атрибутам для функции dir(), можно определить в классе метод __dir__().

Для классов, в которых не определен __dir__(), функция соберет информацию по атрибутам из __dict__.

Данную функцию удобно использовать в интерактивном режиме для поиска нужного атрибута, применяя функцию help() по нужному атрибуту для получения документации.

#dir
  • 👍 1
Post #693 26.6K
Получаем атрибуты объекта

Функция vars() возвращает все атрибуты переданного параметра, в качестве которого может быть почти что угодно: модуль, класс, экземпляр и т. д.

Проще говоря, vars() возвращает словарь, который хранится в атрибуте __dict__ у переданного объекта.

А если ничего не передать в аргументы, то функция вернет словарь локальных переменных, как и locals() (про это был пост, кстати).

#переменные
  • 👍 2
Post #691 27.7K
Генерируем фейковые данные 

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

Например, методы name(), addres(), email() и job() создадут для вас случайные имена, адреса, почты и названия работ. 

Еще есть метод text(), который генерирует случайный текст, но, как видите в примере, результат получается неосмысленный. 

Вообще методов в пакете много, продемонстрировать все в одном посте нереально, поэтому можете почитать больше в документации. 

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

#faker
  • 👍 2
Post #689 25.8K
Деструкторы

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

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

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

#классы
  • 👍 4
Post #687 31.2K
Превращаем текст в числа

Пакет Numerizer преобразует обычный текст в числа. То есть, например, из строки "forty two" можно получить число "42".

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

#numerizer
  • ❤ 3
  • 👍 2
Post #685 29.7K
Выводим вложенные словари и списки

При выводе вложенных словарей и списков с помощью обычного print() мы получаем всё в одну строчку и в неразборчивом виде.

Но в стандартной библиотеке есть модуль pprint, который поможет вывести подобное дело в красивом формате — достаточно в коде заменить print() на pprint.pprint().

Из интересных аргументов есть depth, отвечающий за глубину вложенности при выводе, а также width, который отвечает за ширину вывода в консоли.

#pprint
  • 👍 1
Post #684 26.2K
YaTalks: новый подкаст Яндекса о жизни разработчиков

Будни девелоперов — не только код, но и решение разных вопросов: как проходить собеседования, развивать карьеру, строить личный бренд, привлекать инвестиции в стартапы и многое другое. Такие темы будут обсуждать гости подкаста YaTalks. В повестке первого выпуска — проблема релокации в другие страны и города. Есть ли смысл уезжать, и что может заставить вернуться? Все ответы — в подкасте.
YouTube Подкаст YaTalks. Про релокацию в IT: из России и обратно С какими сложностями сталкиваются разработчики, решившие переехать за границу? Почему возвращаются обратно? И что на самом деле даёт релокация? В первом выпуске YaTalks Podcast говорим о плюсах и минусах переезда с экспертами из Яндекса, Miro и oCitizens.…
  • ❤ 1
  • 👍 1
Post #683 24.7K
Флаги явного преобразования 
 
Флаг явного преобразования (Explicit Conversion Flag) используется для преобразования значения поля format перед его непосредственным форматированием. 

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

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

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

#строки
  • 👍 3
Post #681 24.2K
Разбиение строки на список

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

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

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

#списки
  • 👍 2
Post #677 31K
Работаем с файловыми путями

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

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

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

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

#pathlib
  • 👍 1
Post #675 26.7K
Отсутствующие ключи в словаре

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

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

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

#dict
  • 👍 2
Post #673 26.4K
Конструктор класса

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

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

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

#классы
Post #671 25.8K
Получаем и задаем лимит рекурсии

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

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

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

#рекурсия #лимиты
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 →