Красивый вывод таблиц
Недавно нам понадобилось логировать часть базы данных. И тут мы вспомнили про прекрасный модуль
Итак, имена столбцов задается с помощью атрибута
Но даже если вы не фанат командной строки, то иногда нужно сохранить отчет о работе вашей программы в текстовый файл. В таком случае можно сохранить саму таблицу, вызвав метод
#трюки #prettytable
Недавно нам понадобилось логировать часть базы данных. И тут мы вспомнили про прекрасный модуль
prettytable
, который позволяет красиво выводить таблицы.Итак, имена столбцов задается с помощью атрибута
table.field_names
. А добавлять строки с данными в таблицу можно методом table.add_row([])
, передавая туда список элементов.Но даже если вы не фанат командной строки, то иногда нужно сохранить отчет о работе вашей программы в текстовый файл. В таком случае можно сохранить саму таблицу, вызвав метод
table.get_string()
.#трюки #prettytable
Not a Number
В модуле
Эти объекты
Например можно создать подобный объект, просто передав строку
#nan #tips
В модуле
math
есть особый объект, который называется NaN
(Not a Number).Эти объекты
NaN
не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников.Например можно создать подобный объект, просто передав строку
'nan'
во float
. Кстати говоря, это значит что вы можете использовать NaN
в качестве ключа в словаре (хотя мы и не советуем это делать).#nan #tips
Отлавливаем ошибки с помощью assert
Инструкция
Если выполнить инструкцию
Однако не нужно пытаться обработать исключение
В примере мы проверили, является ли переданный аргумент числовым типом данных. Если не является, то будет вызвано исключение и выведено указанное сообщение.
#исключения #assert
Инструкция
assert
принимает логическое выражение и необязательное сообщение. Она используется для проверки типов, значений аргумента и вывода функции, а также для отладки, поскольку останавливает программу в случае ошибки.Если выполнить инструкцию
assert
с логическим выражением, результат которого равен True
, ничего не произойдет. Но в случае с False
будет сгенерировано исключение AssertionError
.Однако не нужно пытаться обработать исключение
AssertionError
блоком try-except
. В таком случае assert
теряет свой смысл.В примере мы проверили, является ли переданный аргумент числовым типом данных. Если не является, то будет вызвано исключение и выведено указанное сообщение.
#исключения #assert
Временные файлы
В стандартной библиотеке Python есть модуль
Функция
Созданный временный файл будет автоматически удален по закрытию файла или при выходе из контекстного менеджера.
Также другие процессы и приложения не смогут получить доступ к этому временному файлу.
#tempfile
В стандартной библиотеке Python есть модуль
tempfile
, который содержит классы и методы для корректной работы со временными файлами и директориями.Функция
TemporaryFile
создает временный файл в системной директории и возвращает файлоподобный объект.Созданный временный файл будет автоматически удален по закрытию файла или при выходе из контекстного менеджера.
Также другие процессы и приложения не смогут получить доступ к этому временному файлу.
#tempfile
Операторы множеств
Множество — это коллекция, где все элементы уникальны. То есть одно и то же значение не может повторяться дважды.
Помимо обычных методов, у множеств реализована поддержка различных операторов: объединение, пересечение, симметрическая разность, обычная разность и некоторые другие.
Примеры этих операторов можете посмотреть выше на картинке. Реализовано подобное поведение с помощью магических методов, про которые уже не раз говорили на канале.
#множества
Множество — это коллекция, где все элементы уникальны. То есть одно и то же значение не может повторяться дважды.
Помимо обычных методов, у множеств реализована поддержка различных операторов: объединение, пересечение, симметрическая разность, обычная разность и некоторые другие.
Примеры этих операторов можете посмотреть выше на картинке. Реализовано подобное поведение с помощью магических методов, про которые уже не раз говорили на канале.
#множества
Удобная работа с файловыми путями
В стандартной библиотеке есть максимально удобный пакет
Для представления пути к файлу есть класс
Но самой классной фичей является замена
Таким образом, пакет
#pathlib
В стандартной библиотеке есть максимально удобный пакет
pathlib
, позволяющий осуществлять различную работу с файловыми путями. Для представления пути к файлу есть класс
Path
, с объектами которого уже можно производить операции. Например, методы exists()
и is_dir()
проверяют, существует ли файл и является ли он директорией. Но самой классной фичей является замена
os.path.join()
на более удобный и элегантный вариант с использованием слэшей, как показано на картинке. Таким образом, пакет
pathlib
может стать частичной заменой os
в некоторых случаях при работе с файловыми путями. #pathlib
Хэширование
Хэш — это целое число фиксированного размера, которое идентифицирует определенное значение. Каждое уникальное значение должно иметь свой собственный хэш.
Для хэширования значений есть встроенная функция
Но изменяемые объекты по типу списков и словарей нельзя хэшировать — интерпретатор выбросит соответствующую ошибку.
Здесь, кстати, есть две пасхалки. Хэш бесконечности равен перым цифрам числа Пи, а хэш Not a Number равен нулю.
А еще случаются коллизии: например, хэши чисел -1 и -2 одинаковы.
#hash
Хэш — это целое число фиксированного размера, которое идентифицирует определенное значение. Каждое уникальное значение должно иметь свой собственный хэш.
Для хэширования значений есть встроенная функция
hash()
. Используется она в основном для сравнения значений разных объектов — сравнивать хэши легче и выгоднее.Но изменяемые объекты по типу списков и словарей нельзя хэшировать — интерпретатор выбросит соответствующую ошибку.
Здесь, кстати, есть две пасхалки. Хэш бесконечности равен перым цифрам числа Пи, а хэш Not a Number равен нулю.
А еще случаются коллизии: например, хэши чисел -1 и -2 одинаковы.
#hash
Порядок разрешения методов
В Python существует так называемый Method Resolution Order (MRO), или порядок разрешения методов в классе. Всё, что вам нужно знать – это порядок, в котором Python ищет нужный атрибут или метод.
Этот порядок можно получить при помощи атрибута
Отсюда становится понятно, что артибут первее будет найден именно в классе B и равен он будет значению 1.
#классы
В Python существует так называемый Method Resolution Order (MRO), или порядок разрешения методов в классе. Всё, что вам нужно знать – это порядок, в котором Python ищет нужный атрибут или метод.
Этот порядок можно получить при помощи атрибута
__mro__
. Он говорит о том, что если мы в примере выше попробуем обратиться к атрибуту value
, Python будет искать сначала в классе A
, далее в B
, затем в C
и в самом конце в object
. Отсюда становится понятно, что артибут первее будет найден именно в классе B и равен он будет значению 1.
#классы
Находим опечатки в тексте
Полезный пакет
Под капотом модуль использует алгоритм расстояния Левенштейна. А сам код основан на статье, написанной в блоге Питера Норвига. Короче, реализация интересная, советую поизучать.
Но даже если не вникать в подробности, то пакет использовать крайне легко. Примеры использования класса
Пакет поддерживает 6 языков, включая русский. Но за подробностями отправляю вас читать документацию.
#spellchecker
Полезный пакет
spellchecker
позволяет находить опечатки в тексте и даже дает возможные варианты исправлений. Под капотом модуль использует алгоритм расстояния Левенштейна. А сам код основан на статье, написанной в блоге Питера Норвига. Короче, реализация интересная, советую поизучать.
Но даже если не вникать в подробности, то пакет использовать крайне легко. Примеры использования класса
SpellChecker
и его методов correction
и candidates
показаны на картинке. Пакет поддерживает 6 языков, включая русский. Но за подробностями отправляю вас читать документацию.
#spellchecker
ИИ в работе страховых компаний
В «Ингоссрахе» рассказали, в каких конкретно рабочих процессах применяют нейросети на сегодняшний день. На основе machine learning строятся прогнозы убытков, наступления страховых случаев и мошеннических операций. Обучаемые риск-модели показывают, какие клиенты и насколько убыточны в зависимости от пола, возраста и приобретаемых продуктов страхования. Для автоматизации работы и для решения нестандартных задач применяются Computer Vision (CV), Optical Character Recognition (OCR) и Natural Language Processing (NLP). И ущерб от ДТП теперь рассчитывают нейросети по фотографиям с места происшествия.
Второе направление, в котором работу без ИИ уже невозможно представить, это формирование персонифицированных предложений для клиентов. Методами CRM-моделирования оценивается лояльность клиентов, рассчитывается индивидуальный оффер и строится прогноз покупки страховых продуктов. Личные данные клиентов при этом охраняются всеми доступными способами: деперсонализация, хеширование, физическая защита серверов.
В «Ингоссрахе» рассказали, в каких конкретно рабочих процессах применяют нейросети на сегодняшний день. На основе machine learning строятся прогнозы убытков, наступления страховых случаев и мошеннических операций. Обучаемые риск-модели показывают, какие клиенты и насколько убыточны в зависимости от пола, возраста и приобретаемых продуктов страхования. Для автоматизации работы и для решения нестандартных задач применяются Computer Vision (CV), Optical Character Recognition (OCR) и Natural Language Processing (NLP). И ущерб от ДТП теперь рассчитывают нейросети по фотографиям с места происшествия.
Второе направление, в котором работу без ИИ уже невозможно представить, это формирование персонифицированных предложений для клиентов. Методами CRM-моделирования оценивается лояльность клиентов, рассчитывается индивидуальный оффер и строится прогноз покупки страховых продуктов. Личные данные клиентов при этом охраняются всеми доступными способами: деперсонализация, хеширование, физическая защита серверов.
ООП: композиция
Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.
Как правило, в этом случае объект одного из классов (в примере выше это
Ассоциированные объекты зачастую могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора.
В таком случае необходимо использовать слабые ссылки из модуля
#классы #ооп
Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.
Как правило, в этом случае объект одного из классов (в примере выше это
Salary
) является полем другого (Employee
). Сложного здесь, как вы видите, ничего нет.Ассоциированные объекты зачастую могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора.
В таком случае необходимо использовать слабые ссылки из модуля
weakref
, о котором поговорим позже.#классы #ооп
Заглушка в коде
В ходе исполнения оператора
Например, вам надо сделать несколько функций, вы написали
Или в конструкции
#pass
В ходе исполнения оператора
pass
ничего не происходит, поэтому он может использоваться в качестве некой заглушки в тех местах, где это синтаксически необходимо.Например, вам надо сделать несколько функций, вы написали
def'ы
и названия, но сам код еще не успели, однако программу надо запустить и проверить что-то другое. Вот тут и понадобится pass
.Или в конструкции
try-except
, чтобы просто проигнорировать и никак не обрабатывать ошибку в программе.#pass
Скачиваем вебсайты целиком
Максимально простой, но при этом мощный пакет
Функция
А вот
Но здесь надо быть аккуратнее, подобная рекурсивная загрузка отправит много запросов к серверу и может сильно нагрузить его, если на сайте много страниц.
#pywebcopy
Максимально простой, но при этом мощный пакет
pywebcopy
поможет вам клонировать отдельные веб-страницы или даже целые сайты. Функция
save_webpage
скачивает страницу по указанной ссылке, в аргументы также можно передать путь, куда сохранить результат. А вот
save_website
дает возможность скачать целый вебсайт рекурсивно. Например, если сайт представляет из себя блог, то скрипт скачет все статьи, которые есть на сайте. Но здесь надо быть аккуратнее, подобная рекурсивная загрузка отправит много запросов к серверу и может сильно нагрузить его, если на сайте много страниц.
#pywebcopy
Познакомьтесь с IceCream: Улучшенным выводом в Python
Hедавно мы наткнулись на потрясающий инструмент для отладки и разработки в
Что такое
Преимущества
1. Читабельность и простота в использовании:
2. Цветовая кодировка:
Настройка
Это добавит контекст, такой как имя файла и номер строки, в вывод:
Автор идеи поста:
Если у вас есть предложения для следующего поста, делитесь в комментариях!
#Python #logging #icecream
Hедавно мы наткнулись на потрясающий инструмент для отладки и разработки в
Python
, и хотим поделиться им с вами! Представляем вам icecream
- библиотеку, которая упрощает отладку, улучшая вывод ваших данных.Что такое
icecream
?icecream
- это легковесная библиотека для Python
, которая предоставляет простые, но мощные инструменты для отслеживания и вывода значений переменных и данных в процессе выполнения кода. Этот инструмент полезен при отладке, тестировании и разработке, помогая вам лучше понять, что происходит в вашей программе.Преимущества
icecream
перед стандартным print
:1. Читабельность и простота в использовании:
icecream
автоматически выводит имя переменной и ее значение, что делает вывод более понятным и читабельным.2. Цветовая кодировка:
icecream
поддерживает цветовую кодировку вывода, что делает его более наглядным и удобным для анализа.Настройка
icecream
:icecream
позволяет настраивать вывод, добавлять дополнительную информацию, и даже сохранять логи в файл. Вы можете настроить icecream
в соответствии с вашими потребностями, делая вывод более информативным и удобным.from icecream import ic, install
install(autodetect=True, includeContext=True)
number = 42
ic(number)
text = "Привет, мир!"
ic(text)
Это добавит контекст, такой как имя файла и номер строки, в вывод:
ic| <ipython-input-1-5a0d5d83d2d3>:1 in <module> - number: 42
ic| <ipython-input-1-5a0d5d83d2d3>:4 in <module> - text: 'Привет, мир!'
Автор идеи поста:
@hexvel
Если у вас есть предложения для следующего поста, делитесь в комментариях!
#Python #logging #icecream
Работаем с картинками в Python
Библиотека Pillow — это очень мощный, быстрый и удобный инструмент для обработки графики в Python.
В сегодняшнем примере мы применим ее для конвертации картинки в черно-белую, обратим цвета, вертикально отзеркалим и сохраним в файл.
Метод
Библиотека Pillow — это очень мощный, быстрый и удобный инструмент для обработки графики в Python.
В сегодняшнем примере мы применим ее для конвертации картинки в черно-белую, обратим цвета, вертикально отзеркалим и сохраним в файл.
Метод
Image.open('resources/img/cat.jpg')
считывает картинку из папки. img.convert('L')
трансформирует картинку в черно-белую. ImageOps.invert(image)
обращает цвета. img.transpose(Image.FLIP_LEFT_RIGHT)
вертикально отзеркаливает картинку. img.save('grayscale_cat.jpg')
сохранит картинку на диске.Отправляем универсальные уведомления
Наткнулся на интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
#уведомления #notifiers
Наткнулся на интересный пакет notifiers, который позволяет отправлять уведомления на почту, через Телеграм бота, в Слэк и еще много куда. Всего доступно 16 провайдеров, подробнее про них в документации.
В функцию get_notifier передаем название провайдера в виде строки и получаем объект, с которым можно работать. Отправить уведомление можно с помощью универсального метода notify.
Если не уверены, какие аргументы нужно передать для отправки уведомления, то можете посмотреть их через атрибут required у созданного объекта.
Например, для Телеграма нужно передать токен бота, айди чата и само сообщение. В случае с почтой необходимо указать логин, пароль, адресата и также сообщение.
#уведомления #notifiers
14–15 декабря VK Tech проведёт Weekend Offer для Python-разработчиков и инженеров. Это шанс присоединиться к работе над крупнейшей облачной платформой страны VK Cloud и вместе с VK Tech помогать бизнесу расти.
Узнайте больше о вакансиях и откликайтесь здесь.
Флоу простой: оставляете заявку, общаетесь с рекрутерами, выбираете слоты для собеседований и проходите их в назначенное время. О результате VK Tech сообщит вскоре после финального интервью.
Откликайтесь до 13 декабря включительно.
Узнайте больше о вакансиях и откликайтесь здесь.
Флоу простой: оставляете заявку, общаетесь с рекрутерами, выбираете слоты для собеседований и проходите их в назначенное время. О результате VK Tech сообщит вскоре после финального интервью.
Откликайтесь до 13 декабря включительно.
Протоколы
Термины "протокол итератора" или "протокол дескрипторов" уже привычны и используются давно. Но теперь можно описывать протоколы в виде кода и проверять их соответствие на этапе статического анализа.
Протокол описывается как обычный класс, наследующийся от
Хоть это и не совсем интерфейсы, но все же классная штука. Еще важно, что протоколы, как и все остальные фишки аннотаций типов, используются в основном со статически типизированным
#typing #аннотации
Термины "протокол итератора" или "протокол дескрипторов" уже привычны и используются давно. Но теперь можно описывать протоколы в виде кода и проверять их соответствие на этапе статического анализа.
Протокол описывается как обычный класс, наследующийся от
Protocol
. Он может иметь методы (в том числе с реализацией) и поля. Реальные классы, реализующие протокол могут наследоваться от него, но это не обязательно, как показано в примере. Хоть это и не совсем интерфейсы, но все же классная штука. Еще важно, что протоколы, как и все остальные фишки аннотаций типов, используются в основном со статически типизированным
mypy
. #typing #аннотации