Очищаем строки
Чаще всего обработка входных данных сводится к преобразованию символов в верхний или нижний регистр. Иногда данные можно очистить с помощью регулярного выражения.
Но в случаях, когда задача усложняется, можно применить более удачный способ её решения. С помощью словаря со значениями для замены символов и метода
В примере видим, как символы переноса строки
#строки
Чаще всего обработка входных данных сводится к преобразованию символов в верхний или нижний регистр. Иногда данные можно очистить с помощью регулярного выражения.
Но в случаях, когда задача усложняется, можно применить более удачный способ её решения. С помощью словаря со значениями для замены символов и метода
translate
получается крайне лаконичный код.В примере видим, как символы переноса строки
"n"
и табуляции "t"
заменяются на обычные пробелы, а символ "r"
удаляется из строки полностью.#строки
Выделение базовой части слов
При обработки естественного языка в машинном обучении мы сталкиваемся с множеством форм слова, например, демократия и демократизация. Для машин очень важно понимать, что эти разные слова имеют одинаковую базовую форму.
Таким образом, было бы полезно при анализе текста извлекать базовые формы слов. Можно сказать, что для процесса выделения базовой части слова необходимо обрезать концы слов.
В модуле Python NLTK (Natural Language Toolkit Package) есть различные пакет, связанные с данным процессом выделения базовой части и использующие разные алгоритмы.
Один за пакетов,
#snowball
При обработки естественного языка в машинном обучении мы сталкиваемся с множеством форм слова, например, демократия и демократизация. Для машин очень важно понимать, что эти разные слова имеют одинаковую базовую форму.
Таким образом, было бы полезно при анализе текста извлекать базовые формы слов. Можно сказать, что для процесса выделения базовой части слова необходимо обрезать концы слов.
В модуле Python NLTK (Natural Language Toolkit Package) есть различные пакет, связанные с данным процессом выделения базовой части и использующие разные алгоритмы.
Один за пакетов,
snowball
, использует алгоритм соответственно Snowball
, разработанный Мартином Портером. Алгоритм поддерживает большинство популярных языков. Подробнее об алгоритме можно почитать тут.#snowball
Отправляем запросы с HTTPX
Интересный пакет для работы с веб-запросам. Как говорят сами разработчики, это HTTP клиент следующего поколения.
Сравнивая с привычным
— Стандартный синхронный интерфейс, но также есть поддержка асинхронности
— Поддержка HTTP/1.1 и HTTP/2
— Возможность отправлять запросы напрямую к WSGI и ASGI приложениям
— Полная поддержка аннотаций типов
— 100% покрытие тестами
В общем, очень классная альтернатива большинству популярных пакетов, советую посмотреть их доки. Еще у них есть туториал для продвинутого использования.
#httpx
Интересный пакет для работы с веб-запросам. Как говорят сами разработчики, это HTTP клиент следующего поколения.
Сравнивая с привычным
requests
, у httpx
есть следующие преимущества:— Стандартный синхронный интерфейс, но также есть поддержка асинхронности
— Поддержка HTTP/1.1 и HTTP/2
— Возможность отправлять запросы напрямую к WSGI и ASGI приложениям
— Полная поддержка аннотаций типов
— 100% покрытие тестами
В общем, очень классная альтернатива большинству популярных пакетов, советую посмотреть их доки. Еще у них есть туториал для продвинутого использования.
#httpx
Генерируем анекдоты
Не самый полезный, но весьма интересный пакет
Метод
Также можно указать категорию в аргументах — особенно классно заходят штуки про Чак Норриса с пометкой
#pyjokes
Не самый полезный, но весьма интересный пакет
pyjokes
выдает различные шутки и анекдоты на 6 языках. Но русский, к сожалению, в это число не входит.Метод
get_joke()
возвращает строку, которая хранит в себе случайную шутку. В аргументы можно указать язык, по умолчанию стоит английский.Также можно указать категорию в аргументах — особенно классно заходят штуки про Чак Норриса с пометкой
'chuck'
.#pyjokes
Порядок разрешения методов
В Python существует так называемый Method Resolution Order (MRO), или порядок разрешения методов в классе. Всё, что вам нужно знать – это порядок, в котором Python ищет нужный атрибут или метод.
Этот порядок можно получить при помощи атрибута
Отсюда становится понятно, что артибут первее будет найден именно в классе B и равен он будет значению 1.
#классы
В Python существует так называемый Method Resolution Order (MRO), или порядок разрешения методов в классе. Всё, что вам нужно знать – это порядок, в котором Python ищет нужный атрибут или метод.
Этот порядок можно получить при помощи атрибута
__mro__
. Он говорит о том, что если мы в примере выше попробуем обратиться к атрибуту value
, Python будет искать сначала в классе A
, далее в B
, затем в C
и в самом конце в object
. Отсюда становится понятно, что артибут первее будет найден именно в классе B и равен он будет значению 1.
#классы
Генерируем QR-код
Простой, но удобный и полезный пакет для создания QR-кодов. Для отрисовки картинок используется
Чтобы создать объект картинки с QR-кодом необходимо вызвать метод
Еще пакет позволяет создавать QR-коды на основе картинок и в 6 разных стилях. Но про это все, а также про продвинутые примеры использования вы почитаете уже в их документации.
#qrcode
Простой, но удобный и полезный пакет для создания QR-кодов. Для отрисовки картинок используется
Pillow
, так что убедитесь, что он у вас установлен.Чтобы создать объект картинки с QR-кодом необходимо вызвать метод
make()
и передать данные в качестве аргумента. А для сохранения нужно применить метод save()
к полученному объекту.Еще пакет позволяет создавать QR-коды на основе картинок и в 6 разных стилях. Но про это все, а также про продвинутые примеры использования вы почитаете уже в их документации.
#qrcode
Получаем календарь
В модуле
Если строки строки не устраивают, то в модуле есть много методов для получения самых разных итераторов. А еще там можно даже получить календарь в виде HTML.
Кстати, модуль является встроенным, отдельно его устанавливать не нужно.
#calendar
В модуле
calendar
есть функция month()
, которая вернет календарь указанного месяца в виде строки, как показано в примере. А функция calendar()
выдаст целый год.Если строки строки не устраивают, то в модуле есть много методов для получения самых разных итераторов. А еще там можно даже получить календарь в виде HTML.
Кстати, модуль является встроенным, отдельно его устанавливать не нужно.
#calendar
Как работают арифметические операции
Если кто-то еще не знает, то в Python всё является объектами: числа в том числе. И при любых операциях, включая арифметические, у объектов вызываются магические методы.
Например, при сложении у объекта первого слагаемого вызывается соответствующий магический метод и в качестве аргумента передается объект второго слагаемого.
Еще стоит отметить, что у
#magic
Если кто-то еще не знает, то в Python всё является объектами: числа в том числе. И при любых операциях, включая арифметические, у объектов вызываются магические методы.
Например, при сложении у объекта первого слагаемого вызывается соответствующий магический метод и в качестве аргумента передается объект второго слагаемого.
Еще стоит отметить, что у
float
поддерживается деление с остатком, то есть метод __div__
. А int
имеет только деление с округлением, реализованное в методе __floordiv__
.#magic
Создаем контекстный менеджер с помощью декоратора
Обычно протокол управления контекстом реализовывают с помощью класса и двух магических методов:
Так вот, помимо написания своего класса, есть еще один способ создать контекстный менеджер — использовать декоратор
Первая часть функции
#contextlib
Обычно протокол управления контекстом реализовывают с помощью класса и двух магических методов:
__enter__
и __exit__
. Но такой подход может показаться слегка сложным.Так вот, помимо написания своего класса, есть еще один способ создать контекстный менеджер — использовать декоратор
@contextmanager
из встроенного пакета contextlib
.Первая часть функции
tag
, которая идёт до yield
, выполняется при входе в блок with
. Затем исполняется сам этот блок, а после этого завершается оставшаяся часть, которая идет после yield
.#contextlib
Редирект вывода программы
В
Контекстный менеджер принимает аргумент, в котором мы можем указать, куда должен переправляться весь вывод в последующем блоке.
Таким образом, данные из
Убедится в этом можем, открыв файл заново и прочитав оттуда данные.
#contextlib
В
contextlib
есть еще один прикольный контекстный менеджер — redirect_stdout
, позволяющий перенаправить стандартный вывод программы.Контекстный менеджер принимает аргумент, в котором мы можем указать, куда должен переправляться весь вывод в последующем блоке.
Таким образом, данные из
print()
в контекстом менеджере будут переправлены в открытый ранее файл, так как мы его передали в аргумент redirect_stdout
.Убедится в этом можем, открыв файл заново и прочитав оттуда данные.
#contextlib
Ищем знания о Python
Подбираем онлайн-курсы для Python-разработчиков в поисковике Яндекса. Найдите тематический блок с предложениями онлайн-школ в поисковой выдаче. Здесь можно сразу посмотреть программу курса без захода на сайт школы.
По одной только теме python-разработки Поиск выдает более 150 различных курсов.
Воспользуйтесь фильтрами, чтобы выбрать уровень своих знаний (от новичка до уверенного специалиста), цель обучения и сразу отсечь курсы без сертификатов.
Курсы в поиске постоянно дополняются и, если раньше были доступны только программы для бизнеса, IT-сектора и управления, то теперь подборки пополнились курсами по разработке на Python, Go, SQL и многим другим направлениям.
Подбираем онлайн-курсы для Python-разработчиков в поисковике Яндекса. Найдите тематический блок с предложениями онлайн-школ в поисковой выдаче. Здесь можно сразу посмотреть программу курса без захода на сайт школы.
По одной только теме python-разработки Поиск выдает более 150 различных курсов.
Воспользуйтесь фильтрами, чтобы выбрать уровень своих знаний (от новичка до уверенного специалиста), цель обучения и сразу отсечь курсы без сертификатов.
Курсы в поиске постоянно дополняются и, если раньше были доступны только программы для бизнеса, IT-сектора и управления, то теперь подборки пополнились курсами по разработке на Python, Go, SQL и многим другим направлениям.
ООП: композиция
Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.
Как правило, в этом случае объект одного из классов (в примере выше это
Ассоциированные объекты зачастую могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора.
В таком случае необходимо использовать слабые ссылки из модуля
#классы #ооп
Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.
Как правило, в этом случае объект одного из классов (в примере выше это
Salary
) является полем другого (Employee
). Сложного здесь, как вы видите, ничего нет.Ассоциированные объекты зачастую могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора.
В таком случае необходимо использовать слабые ссылки из модуля
weakref
, о котором поговорим позже.#классы #ооп
ООП: композиция
Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.
Как правило, в этом случае объект одного из классов (в примере выше это
Ассоциированные объекты зачастую могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора.
В таком случае необходимо использовать слабые ссылки из модуля
#классы #ооп
Композиция — это отношение, при котором объекты одного класса связаны с объектами другого. Такой способ организации взаимодействия между классами также называется ассоциацией.
Как правило, в этом случае объект одного из классов (в примере выше это
Salary
) является полем другого (Employee
). Сложного здесь, как вы видите, ничего нет.Ассоциированные объекты зачастую могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора.
В таком случае необходимо использовать слабые ссылки из модуля
weakref
, о котором поговорим позже.#классы #ооп
Считаем ссылки на объект
В Python практически никогда не нужно волноваться об управлении памятью, потому что все это делается автоматически.
Счетчик ссылок — это то, что помогает при проверке того, следует ли выполнять сборку мусора или нет. Сборщик мусора удаляет объект из памяти в случае, если на него ничего не ссылается.
Если на объект ссылается другой объект, то он имеет ненулевое значение ссылок и не может быть собран как мусор (если, конечно, вы не удалите вручную).
В примере выше продемонстрирован простой способ, как можно посмотреть количество ссылок у объекта.
#ctypes
В Python практически никогда не нужно волноваться об управлении памятью, потому что все это делается автоматически.
Счетчик ссылок — это то, что помогает при проверке того, следует ли выполнять сборку мусора или нет. Сборщик мусора удаляет объект из памяти в случае, если на него ничего не ссылается.
Если на объект ссылается другой объект, то он имеет ненулевое значение ссылок и не может быть собран как мусор (если, конечно, вы не удалите вручную).
В примере выше продемонстрирован простой способ, как можно посмотреть количество ссылок у объекта.
#ctypes
Пакетный менеджер pip
Для работы с пакетами в Python есть специальная утилита
Установить или удалить пакет можно через команды
Команды
А с помощью
#pip
Для работы с пакетами в Python есть специальная утилита
pip
— устанавливается она сразу вместе с интерпретатором.Установить или удалить пакет можно через команды
install
и uninstall
. После них нужно перечислить необходимые пакеты через пробел.Команды
list
и freeze
покажут все пакеты в текущем окружении, а также их версии. Обратите внимание на то, как выглядит вывод каждой из них.А с помощью
show
можно посмотреть информацию о конкретном пакете: название, версию, описание, автора, лицензию и другое.#pip
Генераторные выражения и списковые включения
В примере выше первая и вторая строчки очень похожи, но различаются видами скобок. В списковом включении они квадратные, а в генераторном выражении – круглые.
Если вывести переменные, то видим, что значением переменной
Нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы — используйте генераторы коллекций.
А если же значения понадобятся еще не скоро или неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.
#генераторы
В примере выше первая и вторая строчки очень похожи, но различаются видами скобок. В списковом включении они квадратные, а в генераторном выражении – круглые.
Если вывести переменные, то видим, что значением переменной
l
является список, а переменная g
хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.Нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы — используйте генераторы коллекций.
А если же значения понадобятся еще не скоро или неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.
#генераторы
Работаем с атрибутами объектов
Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции:
По названиям можно понять, что первые три отвечают за получение, установку и удаление атрибута. А последний проверяет, существует ли атрибут с указанным названием у объекта или нет.
Во всех функциях первыми двумя аргументами идут объект и название атрибута в виде строки. В
На практике использование подобного — довольно редкий случай, но иногда может сильно выручить, так что берите на вооружение.
#классы #атрибуты
Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции:
getattr
, setattr
, delattr
и hasattr
.По названиям можно понять, что первые три отвечают за получение, установку и удаление атрибута. А последний проверяет, существует ли атрибут с указанным названием у объекта или нет.
Во всех функциях первыми двумя аргументами идут объект и название атрибута в виде строки. В
setattr
также нужно передать новое значение для атрибута.На практике использование подобного — довольно редкий случай, но иногда может сильно выручить, так что берите на вооружение.
#классы #атрибуты
Итерируемый счетчик
Еще один классный итератор из
В аргументах можно задать значения
Обычно
#itertools
Еще один классный итератор из
itertools
— это count
, который генерирует бесконечную последовательность чисел.В аргументах можно задать значения
start
и step
: первый отвечает за начальное значение, а второе за шаг, как и в range
.Обычно
count
редко используют с циклом for
. Чаще можно встретить случаи с функциями типа zip
или map
.#itertools
Использование комплексных чисел в Python
Никого здесь уже не удивить такими встроенными типами, как например
В Python комплексные числа представлены в виде
Комплексное число легко можно превратить в строку с помощью функции
Хотя
#complex
Никого здесь уже не удивить такими встроенными типами, как например
int
, float
, и подобными. Но кроме них в Python существует еще один довольно интересный тип, а именно, complex
.В Python комплексные числа представлены в виде
x + iy
. А точнее говоря, вместо буквы i
здесь используется буква j
, во избежание некоторой путаницы, поскольку i
чаще всего занята под циклы. Python преобразует реальные числа x
и y
(будь то int
или float
) в комплексное с помощью функции complex(x,y)
.Комплексное число легко можно превратить в строку с помощью функции
str
или посчитать его модуль с помощью функции abs
, а также для доступа к его реальной или мнимой частям можно воспользоваться методами real
и imag
.Хотя
complex
и является встроенным типом, для более удобной работы с комплексными операциями рекомендуется импортировать модуль cmath
.#complex
Decimal и Fraction
Из-за того, что дробные числа с плавающей точкой хранятся в двоичном виде, мы обычно работаем с приблизительными значениями, как в первом варианте на скрине.
Для получения более точных результатов можно использовать класс
В данной связи, для идеальных вычислений лучше использовать класс
#decimal
Из-за того, что дробные числа с плавающей точкой хранятся в двоичном виде, мы обычно работаем с приблизительными значениями, как в первом варианте на скрине.
Для получения более точных результатов можно использовать класс
Decimal
, но и его может не хватить в некоторых случаях.В данной связи, для идеальных вычислений лучше использовать класс
Fraction
, т.к. он работает с числами в виде рациональных дробей.#decimal