Улучшенные отчеты об ошибках
В последнем обновлении Python 3.10 добавили более удобную и точную информацию об ошибках. Теперь выводится и природа ошибки, и ее местоположение в коде.
Для ошибок, связанных с опечатками в названиях атрибутов и имен переменных в функциях, добавили рекомендации по исправлению.
#updates
В последнем обновлении Python 3.10 добавили более удобную и точную информацию об ошибках. Теперь выводится и природа ошибки, и ее местоположение в коде.
Для ошибок, связанных с опечатками в названиях атрибутов и имен переменных в функциях, добавили рекомендации по исправлению.
#updates
Проверка истинности объекта класса
Для того, чтобы определить поведение при проверке на истинность объектов классов в python3 есть "магический" метод
Если данный метод определен в классе, то он будет вызываться при каждой проверке объекта на истинность а также с помощью функции
Если
#magic #__bool__
Для того, чтобы определить поведение при проверке на истинность объектов классов в python3 есть "магический" метод
__bool__()
, который был добавлен на замену устаревшему __nonzero__()
в python2.Если данный метод определен в классе, то он будет вызываться при каждой проверке объекта на истинность а также с помощью функции
bool()
. Метод должен возвращать False
или True
. Если
__bool__()
не определен, будет вызываться метод __len__()
, если он определен, и, соответственно, объект будет считаться истинным, если результат __len__()
не будет равен нулю. Если в классе не определены ни __len__()
, ни __bool__()
, все его экземпляры будут истинными.#magic #__bool__
Обрабатываем номера телефонов
Пакет
Основным классом, который представляет номер, является
В целом, пакет использовать достаточно просто, базовые примеры есть на картинке. Также можете посмотреть документацию для более продвинутого использования.
#phonenumbers
Пакет
phonenumbers
основан на библиотеке libphonenumber от Google, которая позволяет форматировать, парсить и проверять номера телефонов.Основным классом, который представляет номер, является
PhoneNumber
. Объект можно создать, вызвав метод parse()
и передав в аргументы номер телефона в виде строки. Вторым аргументом также можно указать страну.В целом, пакет использовать достаточно просто, базовые примеры есть на картинке. Также можете посмотреть документацию для более продвинутого использования.
#phonenumbers
Обрабатываем естественный язык
TextBlob — удобный пакет для обработки текста. Он предоставляет простой API для погружения в общие задачи обработки естественного языка (NLP), такие как анализ тональности, пометку частей речи, перевод и многое другое.
Здесь особенно круто, что к объектам класса
Документация находится здесь, но некоторые примеры есть и на картинке выше. Еще важно, что несколько функций, например
#textblob
TextBlob — удобный пакет для обработки текста. Он предоставляет простой API для погружения в общие задачи обработки естественного языка (NLP), такие как анализ тональности, пометку частей речи, перевод и многое другое.
Здесь особенно круто, что к объектам класса
TextBlob
можно применять методы строк (upper
, split
, format
и т. д.) и в целом обращаться с ними как с обычными строками.Документация находится здесь, но некоторые примеры есть и на картинке выше. Еще важно, что несколько функций, например
translate()
, требуют подключения к интернету.#textblob
Фронтенд и Python
Brython предназначен для замены Javascript в качестве языка сценариев для веб-страниц. Таким образом, это по сути Python 3, адаптированный к среде HTML5, то есть с интерфейсом к объектам и событиям DOM.
На картинке можете посмотреть простую HTML страницу со вставкой скрипта на Brython. Больше примеров можно найти в их галерее.
Проект интересный, но лично я бы не стал использовать его в продакшне. В любом случае можете ознакомиться с их документацией.
#brython
Brython предназначен для замены Javascript в качестве языка сценариев для веб-страниц. Таким образом, это по сути Python 3, адаптированный к среде HTML5, то есть с интерфейсом к объектам и событиям DOM.
На картинке можете посмотреть простую HTML страницу со вставкой скрипта на Brython. Больше примеров можно найти в их галерее.
Проект интересный, но лично я бы не стал использовать его в продакшне. В любом случае можете ознакомиться с их документацией.
#brython
Аргументы командой строки
При запуске программ через терминал можно указывать аргументы через пробел. В Python список этих аргументов хранится в переменной
Первым элементом всегда является имя запускаемого скрипта, вторым и далее — непосредственно сами аргументы.
#sys
При запуске программ через терминал можно указывать аргументы через пробел. В Python список этих аргументов хранится в переменной
argv
во встроенном модуле sys
.Первым элементом всегда является имя запускаемого скрипта, вторым и далее — непосредственно сами аргументы.
#sys
Получаем версию Python
Во пакете
Проверка версии интерпретатора может быть полезна в случае, если вы используете какие-то фичи из более новых версий языка.
#sys
Во пакете
sys
есть удобная переменная version_info
, которая хранит в себе версию Python, с помощью которого был запущен скрипт.Проверка версии интерпретатора может быть полезна в случае, если вы используете какие-то фичи из более новых версий языка.
#sys
PyAutoGUI
PyAutoGUI позволяет Python управлять мышью и клавиатурой для автоматизации взаимодействия с другими приложениями. Пакет работает в Windows, macOS и Linux на Python 2 и 3.
Из ключевого функционала можно выделить следующее:
— Передвижение курсора и нажатие на кнопки мыши;
— Набор текста, например для заполнения форм;
— Скриншоты, поиск указанных изображений на экране (например, иконки) и нажатие на них;
— Поиск приложения на экране, изменение размера его окна, перемещение по экрану и т. д.
Основные функции показаны в примере на картинке выше, остальное — в документации проекта.
#pyautogui
PyAutoGUI позволяет Python управлять мышью и клавиатурой для автоматизации взаимодействия с другими приложениями. Пакет работает в Windows, macOS и Linux на Python 2 и 3.
Из ключевого функционала можно выделить следующее:
— Передвижение курсора и нажатие на кнопки мыши;
— Набор текста, например для заполнения форм;
— Скриншоты, поиск указанных изображений на экране (например, иконки) и нажатие на них;
— Поиск приложения на экране, изменение размера его окна, перемещение по экрану и т. д.
Основные функции показаны в примере на картинке выше, остальное — в документации проекта.
#pyautogui
Цепочка исключений
Для формирования цепочек исключений используется ключевое слово
В результате, если вызванное исключение не обработано, то на вывод будут отправлены оба исключения.
#exception
Для формирования цепочек исключений используется ключевое слово
from
, после которого требуется указать ещё одно исключение. Это исключение будет подвязано к вызванному в атрибут __cause__
(поддерживает запись).В результате, если вызванное исключение не обработано, то на вывод будут отправлены оба исключения.
#exception
Официальное упорядочивание словарей
Кстати, Python 3.7 на официальном уровне зафиксировал соответствие порядка перебора элементов словарей порядку их добавления.
Но для некоторых это не такая уж и новость, так как и в Python 3.6 словари уже были упорядочены, что видно на примере выше.
Однако это был просто побочный результат реализации, не зафиксированный в стандарте. Новый Python оформил его официально. Теперь можно быть уверенным в сохранении порядка вставки.
#словари
Кстати, Python 3.7 на официальном уровне зафиксировал соответствие порядка перебора элементов словарей порядку их добавления.
Но для некоторых это не такая уж и новость, так как и в Python 3.6 словари уже были упорядочены, что видно на примере выше.
Однако это был просто побочный результат реализации, не зафиксированный в стандарте. Новый Python оформил его официально. Теперь можно быть уверенным в сохранении порядка вставки.
#словари
Выполняем код по расписанию
Часто от программиста требуется написать код, который должен выполняться в определенный промежуток времени или по расписанию. Для решения этой проблемы существует много решений, но одно из них — это библиотека aiocron.
Она позволяет просто описать в декораторе конфигурацию расписания, согласно которому метод будет запускаться. В примере выше функция
#aiocron
Часто от программиста требуется написать код, который должен выполняться в определенный промежуток времени или по расписанию. Для решения этой проблемы существует много решений, но одно из них — это библиотека aiocron.
Она позволяет просто описать в декораторе конфигурацию расписания, согласно которому метод будет запускаться. В примере выше функция
attime
будет выполняться каджую минуту с 6 утра до 10 вечера в рабочие дни недели. Подробнее о написании своих расписаний можно почитать тут.#aiocron
Генерация случайных значений с помощью модуля secrets
Встроенный модуль
Интерфейс использования
Также в модуле есть класс
#secrets #random
Встроенный модуль
secrets
используется для генерации криптографически стойких случайных чисел, с помощью средств предоставляемых операционной системой. Что хорошо подходит при работе с паролями, токенами аутентификации.Интерфейс использования
secrets
довольно прост и схож с random
. Его основные функции:secrets.choice(collection)
- возвращает случайно выбранный элемент из переданной коллекции. secrets.randbelow(n)
- возвращает случайный int в диапазоне [0, n).secrets.randbits(n)
- возвращает целое число int состоящее из n случайных бит.secrets.token_bytes(n)
- возвращает случайную байтовую строку, содержащую n байт.token_hex(n)
- возвращает случайную строку из n байт в шестнадцатеричной формате.token_urlsafe(n)
- возвращает URL-безопасную строку, содержащая n байт, закодированную в Base64.Также в модуле есть класс
SystemRandom
, который поддерживает большинство функций определенных в random.#secrets #random
Строим графики
Для построения графиков в Python существует библиотека Matplotlib. Это мощный инструмент для визуализации данных.
Сначала нам нужен массив с данными, которые мы хотим изобразить на графике. Это может быть, например, список или
Далее метод
Метод
Пример графика можно посмотреть здесь, а официальную документацию по Matplotlib можно почитать тут.
#matplotlib
Для построения графиков в Python существует библиотека Matplotlib. Это мощный инструмент для визуализации данных.
Сначала нам нужен массив с данными, которые мы хотим изобразить на графике. Это может быть, например, список или
numpy
массив.Далее метод
plt.plot(data)
принимает наши данные и строит график в виде точек с координатами из массива и обьединяет их линиями.Метод
plt.show()
откроет графическое окно с изображенным графиком.Пример графика можно посмотреть здесь, а официальную документацию по Matplotlib можно почитать тут.
#matplotlib
Валидация данных с Pydantic
Pydantic — это библиотека для парсинга и валидации данных, в котором атрибуты класса имеют статическую типизацию.
Эта типизация используется в момент создания обьекта класса для проверки значений.
Пакет хорош в ситуациях когда вам нужно распарсить какой-то json, и все это превращается в рутину: проверка структуры json, необходимых полей, значений и так далее.
Также имеется поддержка множества других типов данных, помимо стандартных, таких как почта, url адрес, номер платежных карт.
Полноценный пример есть на картинке выше. Документация находится здесь.
#pydantic
Pydantic — это библиотека для парсинга и валидации данных, в котором атрибуты класса имеют статическую типизацию.
Эта типизация используется в момент создания обьекта класса для проверки значений.
Пакет хорош в ситуациях когда вам нужно распарсить какой-то json, и все это превращается в рутину: проверка структуры json, необходимых полей, значений и так далее.
Также имеется поддержка множества других типов данных, помимо стандартных, таких как почта, url адрес, номер платежных карт.
Полноценный пример есть на картинке выше. Документация находится здесь.
#pydantic
Функция zip в Python 3.10
Функция
Но если передать на вход итерируемые объекты неравной длины, то количество кортежей будет сформировано по самой короткой последовательности, а оставшиеся элементы в более длинных будут игнорироваться, что может привести к нежелательным результатам.
В python 3.10 в функцию был добавлен необязательный аргумент
В случае же если требуется составить кортежи по всем элементам последовательности в независимости от равенства длин, в модуле
#zip #zip_longest #itertools
Функция
zip
принимает на вход в качестве аргументов итерируемые объекты, а возвращает итератор из кортежей, где i-й кортеж содержит i-й элемент из каждой последовательности.Но если передать на вход итерируемые объекты неравной длины, то количество кортежей будет сформировано по самой короткой последовательности, а оставшиеся элементы в более длинных будут игнорироваться, что может привести к нежелательным результатам.
В python 3.10 в функцию был добавлен необязательный аргумент
strict
, который является флагом проверки входных итерируемых объектов на равенство их длин. В случае, если длины не равны, то будет выброшено исключение ValueError
.В случае же если требуется составить кортежи по всем элементам последовательности в независимости от равенства длин, в модуле
itertools
существует функция zip_longest
. Данная функция работает точно также как zip, но заменяет отсутствующие элементы значением, переданным в fillvalue
, которое по умолчанию равно None
.#zip #zip_longest #itertools
Работаем с данными
pandas - это мощный инструмент для анализа данных в Python. С помощью данного фреймворка, работа с «реляционными» или «помеченными» данными простой и интуитивно понятной. Сегодня мы применим его для модификации
Чтобы загрузить датафрейм из файла (пример), используем метод
Применим фильтр по полю
В
Для удаления одной или нескольких колонок можно использовать метод
При сохранении в файл мы можем дополнительно указать
#pandas
pandas - это мощный инструмент для анализа данных в Python. С помощью данного фреймворка, работа с «реляционными» или «помеченными» данными простой и интуитивно понятной. Сегодня мы применим его для модификации
csv
файла.Чтобы загрузить датафрейм из файла (пример), используем метод
pd.read_csv()
.Применим фильтр по полю
sepal.length > 5
. В SQL данная операция выглядела бы таким образом:SELECT * FROM df WHERE sepal.length > 5
.В
pandas
же для получения необходимых строк фрейма можем использовать метод loc
, передав в нее необходимый фильтр: df = df.loc[df['sepal.length'] > 5]
Для удаления одной или нескольких колонок можно использовать метод
df.drop()
:df = df.drop(columns=['petal.width', 'petal.length'])
При сохранении в файл мы можем дополнительно указать
pandas
не добавлять генерирующийся индекс строкам, если он нам не нужен:df.to_csv('new_iris.csv', index = False)
#pandas
Пишете на Java или Python и хотите работать в Яндексе?
Тогда приглашаем 22 января на Fast Track для бэкенд-разработчиков. На мероприятии вы можете за один день пройти собеседование и получить оффер в команду HR Tech Яндекса.
HR Tech занимается интранетом Яндекса. Например, это сервисы для процесса найма в Яндекс, учебная платформа Яндекс.Контест и другие сервисы для организации работы сотрудников. Подробнее о команде здесь.
Регистрируйтесь, решайте отборочный тест и до встречи 22 января!
Регистрация
Тогда приглашаем 22 января на Fast Track для бэкенд-разработчиков. На мероприятии вы можете за один день пройти собеседование и получить оффер в команду HR Tech Яндекса.
HR Tech занимается интранетом Яндекса. Например, это сервисы для процесса найма в Яндекс, учебная платформа Яндекс.Контест и другие сервисы для организации работы сотрудников. Подробнее о команде здесь.
Регистрируйтесь, решайте отборочный тест и до встречи 22 января!
Регистрация
Вакансии: HR Tech
Работа в Яндексе. Яндекс очень разный, поэтому каждый может найти своё.
Валидация email-адресов
Для проверки корректности email-адреса а также действительности его существования существует неплохой модуль
Модуль предоставляет одну основную одноименную функцию, предназначенную для валидации адреса, с помощью уже написанных регулярных выражений. Также в функции реализована проверка mx-записи у сервера и существования переданного адреса, за это отвечают необязательные параметры-флаги функции
Для обращения
#validate_email
Для проверки корректности email-адреса а также действительности его существования существует неплохой модуль
validate_email
.Модуль предоставляет одну основную одноименную функцию, предназначенную для валидации адреса, с помощью уже написанных регулярных выражений. Также в функции реализована проверка mx-записи у сервера и существования переданного адреса, за это отвечают необязательные параметры-флаги функции
verify
и check_mx
.Для обращения
validate_email
к DNS записям необходимо предварительно установить модуль py3dns
.#validate_email
Работаем с USB
PyUSB — это библиотека, которая обеспечивает легкий доступ к USB. Имеет поддержку изохронной передачи, если её поддерживает бэкенд.
Основные методы для работы с USB, такие как
Пакет
Функция
Также есть реализация внешнего и внутреннего интерфейса, для изоляции API от деталей реализации системы. Связующим звеном между двумя слоями является интерфейс IBackend.
PyUSB поставляется со встроенными бэкэндами для libusb 1.0, libusb 0.1 и OpenUSB.
#PyUSB
PyUSB — это библиотека, которая обеспечивает легкий доступ к USB. Имеет поддержку изохронной передачи, если её поддерживает бэкенд.
Основные методы для работы с USB, такие как
find()
, show_devices()
и т. д, хранятся в usb.core
.Пакет
usb.util
содержит вспомогательные функции.Функция
find()
используется для поиска устройств, подключенных к системе.Также есть реализация внешнего и внутреннего интерфейса, для изоляции API от деталей реализации системы. Связующим звеном между двумя слоями является интерфейс IBackend.
PyUSB поставляется со встроенными бэкэндами для libusb 1.0, libusb 0.1 и OpenUSB.
#PyUSB
Работа с форматированием текста
textwrap — это стандартная библиотека, которая спользуется для форматирования текста в тех случаях, когда нам нужна красивая печать.
Он предлагает функциональность аналогичную текстовым редакторам и текстовым процессорам.
Немного о возможностях:
#textwrap
textwrap — это стандартная библиотека, которая спользуется для форматирования текста в тех случаях, когда нам нужна красивая печать.
Он предлагает функциональность аналогичную текстовым редакторам и текстовым процессорам.
Немного о возможностях:
textwrap.fill()
— принимает текст и возвращает отформатированный текст, первая строка сохраняет свой отступ, а пробелы в начале каждой последующей строки вставляются в абзац.textwrap.dedent()
— используется для удаления общего префикса пробела из всех строк в тексте.textwrap.indent()
— используется для добавления текст префикса ко всем строкам в параграфе#textwrap