Первые шаги в Python
Специально для начинающих сделали универсальную подборку ресурсов для изучения Python с полного нуля.
Подборка включает в себя бесплатные онлайн-курсы, книги, YouTube каналы, сайты для практики и другое.
Читать 2 минуты
#статья
Специально для начинающих сделали универсальную подборку ресурсов для изучения Python с полного нуля.
Подборка включает в себя бесплатные онлайн-курсы, книги, YouTube каналы, сайты для практики и другое.
Читать 2 минуты
#статья
Перегрузка операторов сравнения
В случае, если вам в коде необходимо сравнивать объекты какого-либо класса, требуется реализовать магические методы, которые вызываются при сравнении.
Например, под капотом записи
Писать все шесть методов получается слегка громоздко, поэтому зачастую используют декоратор
#классы
В случае, если вам в коде необходимо сравнивать объекты какого-либо класса, требуется реализовать магические методы, которые вызываются при сравнении.
Например, под капотом записи
a < b
вызывается a.__lt__(b)
. Для каждого оператора сравнения существует свой магический метод. Подробнее про то, какой метод за какой оператор отвечает, выше в коде. Писать все шесть методов получается слегка громоздко, поэтому зачастую используют декоратор
total_ordering
из functools
. Про него, кстати, недавно писали пост. #классы
Быстрое написание ботов ВК
Библиотека LiteVkApi написана на основе обычного VK API для упрощения написания ботов для ВК. Пакет позволяет абстрагироваться от работы с API и сконцентрироваться на самом боте.
В примере скрипт отправляет сообщение "И тебе привет!", если боту написали "Привет!". Присылает клавиатуру с кнопками "Привет!" и "Закрыть клавиатуру!" на команду "Клавиатура". А на фразу "Закрыть клавиатуру" бот её удалит с экрана пользователя.
Присылайте свои проекты в личные сообщения @a1f20. Про самое интересное расскажем на канале.
#проектподписчика
Библиотека LiteVkApi написана на основе обычного VK API для упрощения написания ботов для ВК. Пакет позволяет абстрагироваться от работы с API и сконцентрироваться на самом боте.
В примере скрипт отправляет сообщение "И тебе привет!", если боту написали "Привет!". Присылает клавиатуру с кнопками "Привет!" и "Закрыть клавиатуру!" на команду "Клавиатура". А на фразу "Закрыть клавиатуру" бот её удалит с экрана пользователя.
Присылайте свои проекты в личные сообщения @a1f20. Про самое интересное расскажем на канале.
#проектподписчика
Список импортов по умолчанию
Для ограничения импорта переменных, функций и классов по умолчанию можно использовать список
Таким образом, при импорте вида
Тем не менее, в примере выше импортировать функцию
#модули
Для ограничения импорта переменных, функций и классов по умолчанию можно использовать список
__all__
, в который записываются названия объектов, которые будут подключены.Таким образом, при импорте вида
from module import *
из модуля c подобной записью подключатся только объекты с названиями из списка __all__
.Тем не менее, в примере выше импортировать функцию
foo
из такого модуля всё ещё можно, например, с помощью записи from module import foo
.#модули
База данных на минималках
Встроенный модуль
Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод
В документации заявляют, что такая база данных является "надежной". Но учитывая, что
#shelve
Встроенный модуль
shelve
позволяет сохранять и читать произвольные данные. Таким образом, можно сохранять любые Python объекты для дальнейшего использования. Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод
shelve.open
поддерживает протокол контекстного менеджера, то есть можно не вызывать метод close
. В документации заявляют, что такая база данных является "надежной". Но учитывая, что
shelve
написан на pickle
, его стоит использовать только в совсем маленьких проектах.#shelve
Сохраняем бинарные данные
Модуль
Но классы, функции и методы сохранить не получится. Здесь также важно понимать, что при сохранении объекта сохраняется строка, указывающая, к какому классу относится этот объект.
Однако будьте осторожнее,
#pickle
Модуль
pickle
, который мы затронули в прошлом посте, реализует двоичные протоколы для сериализации и десериализации объектов. Вы можете сохранить любой объект, если возможно перевести каждый его атрибут в двоичный вид. Но классы, функции и методы сохранить не получится. Здесь также важно понимать, что при сохранении объекта сохраняется строка, указывающая, к какому классу относится этот объект.
Однако будьте осторожнее,
pickle
не защищен от ошибочных или вредоносных данных. Никогда не извлекайте данные, полученные из ненадежных или не прошедших проверку подлинности источников.#pickle
Пишем асинхронных ботов для ВК
Под постом про проект подписчика, связанный с написанием ВК ботов, в комментариях упомянули про модуль
Библиотека является асинхронной и требует минимум кода со стороны разработчика, что позволяет сконцентрироваться на задаче, не тратя силы и время на само взаимодействие с API.
Код, написанный на
#боты #vk
Под постом про проект подписчика, связанный с написанием ВК ботов, в комментариях упомянули про модуль
vkbottle
, про который сейчас и расскажем.Библиотека является асинхронной и требует минимум кода со стороны разработчика, что позволяет сконцентрироваться на задаче, не тратя силы и время на само взаимодействие с API.
Код, написанный на
vkbottle
, чем-то похож на всем знакомый flask
. А пример выше реализует бота, который отвечает сообщением "Здравствуй!" на "Привет". #боты #vk
Задай свой вопрос в нашем чате
Если вы ещё не знаете, то у нас есть активный чат, в котором уже 1200+ участников.
Присоединяйтесь, задавайте свои вопросы и не забывайте помогать другим.
@python_academy_chat
Если вы ещё не знаете, то у нас есть активный чат, в котором уже 1200+ участников.
Присоединяйтесь, задавайте свои вопросы и не забывайте помогать другим.
@python_academy_chat
Django Telegram Logger
Наш подписчик написал удобное расширение для фреймворка Django, которое представляет из себя логгер для Telegram. Можете ознакомиться с исходным кодом.
Модуль устанавливается через пакетный менеджер
И ещё надо указать токен бота в Telegram и
в файле настроек Django.
Присылайте свои проекты в личные сообщения @a1f20. Про самое интересное расскажем на канале.
#проектподписчика
Наш подписчик написал удобное расширение для фреймворка Django, которое представляет из себя логгер для Telegram. Можете ознакомиться с исходным кодом.
Модуль устанавливается через пакетный менеджер
pip
. Для его настройки требуется добавить "telegram_logger"
в INSTALLED_APPS
, а также "TelegramLoggerMiddleware"
в MIDDLEWARE_CLASSES
. И ещё надо указать токен бота в Telegram и
user_id
аккаунта, на который будут приходить уведомления. Это всё делается в словаре TELEGRAM_LOGGER_CONF
в файле настроек Django.
Присылайте свои проекты в личные сообщения @a1f20. Про самое интересное расскажем на канале.
#проектподписчика
Аннотации типов: Union и Optional
Ранее на канале был пост про базовые аннотации типов. Но важно знать и про такие аннотации, как
При необходимости допустить использование не любых типов, а только некоторых, можно использовать аннотацию
Для объявления опциональных переменных используется
Кстати, аннотация
#аннотации
Ранее на канале был пост про базовые аннотации типов. Но важно знать и про такие аннотации, как
Union
и Optional
.При необходимости допустить использование не любых типов, а только некоторых, можно использовать аннотацию
Union[T, ...]
с указанием списка типов в квадратных скобках.Для объявления опциональных переменных используется
Optional[T]
. Такая аннотация нужна для переменных, которые либо имеют значение определенного типа, либо равны None
.Кстати, аннотация
Optional[T]
эквивалентна Union[T, None]
. #аннотации
Заменяем часть строки
Со строками в Python работать очень удобно, так как встроенных методов для них предостаточно. Одним из методов является
Первым аргументом передается подстрока, которая будет изменяться в исходной строке. Вторым аргументом — то, на что будет заменяться.
Также есть третий, опциональный, аргумент, который отвечает за то, сколько раз вы хотите заменить старую подстроку на новую. По умолчанию, все вхождения заменяются.
#строки
Со строками в Python работать очень удобно, так как встроенных методов для них предостаточно. Одним из методов является
str.replace()
, который позволяет заменять части строк.Первым аргументом передается подстрока, которая будет изменяться в исходной строке. Вторым аргументом — то, на что будет заменяться.
Также есть третий, опциональный, аргумент, который отвечает за то, сколько раз вы хотите заменить старую подстроку на новую. По умолчанию, все вхождения заменяются.
#строки
Создаем пакеты
Пакет в Python — это, грубо говоря, папка с другими папками и модулями. Помимо разделения частей проекта, пакеты нужны для формирования пространства имен, чтобы можно работать с пакетами и модулями через точку, как в примере выше.
При импорте вида
Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
#модули #пакеты
Пакет в Python — это, грубо говоря, папка с другими папками и модулями. Помимо разделения частей проекта, пакеты нужны для формирования пространства имен, чтобы можно работать с пакетами и модулями через точку, как в примере выше.
При импорте вида
from package import *
будет подключены либо все модули и объекты модуля __init__.py
, либо то, что находится в переменной __all__
в том же модуле __init__.py
— подробнее про эту переменную было в посте ранее.Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
#модули #пакеты
Создаем виртуальное окружение
Виртуальное окружение — это изолированная среда, которая имеет свои локальные интерпретатор и пакеты, независимые от глобального интерпретатора и других окружений.
В стандартной библиотеке Python третьей версии есть пакет
Скрипт
В случае успешного создания и активации у вас в терминале должно появится название вашего виртуального окружения в круглых скобках.
#venv
Виртуальное окружение — это изолированная среда, которая имеет свои локальные интерпретатор и пакеты, независимые от глобального интерпретатора и других окружений.
В стандартной библиотеке Python третьей версии есть пакет
venv
, который позволяет создавать виртуальные окружения удобно и быстро. Пример представлен на картинке. Скрипт
activate
в директории bin
предназначен для активации окружения, а команда deactivate
в уже активированном окружении — для выхода из него.В случае успешного создания и активации у вас в терминале должно появится название вашего виртуального окружения в круглых скобках.
#venv
ORM для PostgreSQl и SQlite3
ViBranium — это ORM, которая умеет работать с базами данных PostgreSQl и SQlite3. Помимо функционала для работы с бд, в пакете также есть удобные модули для логирования и шифрования.
А поскольку далеко не все данные следует хранить в чистом виде, вы можете пропустить их через хеш-функции с помощью класса Encrypt, который есть внутри ViBranium.
Присылайте свои проекты в личные сообщения @a1f20. Про самое интересное расскажем на канале.
#проектподписчика
ViBranium — это ORM, которая умеет работать с базами данных PostgreSQl и SQlite3. Помимо функционала для работы с бд, в пакете также есть удобные модули для логирования и шифрования.
А поскольку далеко не все данные следует хранить в чистом виде, вы можете пропустить их через хеш-функции с помощью класса Encrypt, который есть внутри ViBranium.
Присылайте свои проекты в личные сообщения @a1f20. Про самое интересное расскажем на канале.
#проектподписчика
Статические методы
Отличие статических методов от обычных в том, что они привязаны к классу, а не объекту. То есть они могут быть вызваны напрямую у класса.
Статический метод не принимает ни объект (
Реализовать статический метод можно двумя способами. Один из них — присвоить классу новый метод, напрямую передав изначальный метод в функцию
Но так делать не принято, поэтому чаще всего
#staticmethod
Отличие статических методов от обычных в том, что они привязаны к классу, а не объекту. То есть они могут быть вызваны напрямую у класса.
Статический метод не принимает ни объект (
self
), ни класс (cls
) в аргументах. То есть такие методы не могут модифицировать ни объект, ни сам класс. Реализовать статический метод можно двумя способами. Один из них — присвоить классу новый метод, напрямую передав изначальный метод в функцию
staticmethod
. Но так делать не принято, поэтому чаще всего
staticmethod
используют в качестве декоратора при написании методов прямо в классе. #staticmethod
Находим наименьшие и наибольшие
В стандартной библиотеке есть модуль
Особенности и пользу этой структуры данных пока что разбирать не будем, но посмотрим на два интересных метода в этом модуле.
С помощью методов
Первым аргументов передается, сколько элементов нужно взять, вторым — список.
#heap
В стандартной библиотеке есть модуль
heapq
, который, как можно понять по названию, реализует структуру даных куча.Особенности и пользу этой структуры данных пока что разбирать не будем, но посмотрим на два интересных метода в этом модуле.
С помощью методов
nsmallest
и nlargest
можно получить наименьшие и наибольшие элементы в списке. Первым аргументов передается, сколько элементов нужно взять, вторым — список.
#heap
Получаем информацию о памяти на диске
Со встроенным модулем
Но с помощью
Так как все три значения возвращаются в байтах, в примере мы их перевели и вывели в гигабайты для лучшей наглядности.
#shutil
Со встроенным модулем
shutil
многие уже, вероятно, знакомы, но его обычно используют в контексте задач копирования, переноса файлов и папок.Но с помощью
shutil
мы можем даже получить информацию о памяти на жестком диске компьютера. Метод disk_usage
возвращает количество всей, занятой и свободной памяти.Так как все три значения возвращаются в байтах, в примере мы их перевели и вывели в гигабайты для лучшей наглядности.
#shutil
Списковые включения
На основе итерируемых объектов можно удобно и без циклов строить списки в одну строчку — такой синтаксис называется списковыми включениями.
Сейчас подробнее разберем именно списки, но по такому же принципу можно создавать и словари.
В квадратных скобках вы пишите самую обычную конструкцию цикла
Как правило, списковые включения работают заметно быстрее, чем циклы. Однако, злоупотреблять этим не рекомендуется, так как это зачастую снижает читаемость кода.
#списки #словари
На основе итерируемых объектов можно удобно и без циклов строить списки в одну строчку — такой синтаксис называется списковыми включениями.
Сейчас подробнее разберем именно списки, но по такому же принципу можно создавать и словари.
В квадратных скобках вы пишите самую обычную конструкцию цикла
for
, но само выражение ставите перед ключевым словом for
. Также можно добавлять условия в конце записи.Как правило, списковые включения работают заметно быстрее, чем циклы. Однако, злоупотреблять этим не рекомендуется, так как это зачастую снижает читаемость кода.
#списки #словари
Время исполнения программы
Зачастую требуется замерить время исполнения кода, чтобы понять, насколько оптимальное решение было выбрано.
Как вариант, можно воспользоваться функцией
Перед исполнением нашего кода сохраним начальное время, а после — конечное. Путем вычета первого из второго и получим время исполнения программы.
Использование
#time
Зачастую требуется замерить время исполнения кода, чтобы понять, насколько оптимальное решение было выбрано.
Как вариант, можно воспользоваться функцией
time
из модуля time
, которая возвращает текущее время в формате Unix.Перед исполнением нашего кода сохраним начальное время, а после — конечное. Путем вычета первого из второго и получим время исполнения программы.
Использование
time.time()
— не самый точный и лучший вариант, но, например, для быстрого сравнения двух разных частей кода подходит хорошо.#time
Получаем информацию по IP
Недавно наткнулся на интересный пакет
Метод
Атрибуты
#ip
Недавно наткнулся на интересный пакет
ip2geotools
, с помощью которого можно получить геолокацию по IP из нескольких баз данных. Устанавливается он через пакетный менеджер pip
. Метод
get
из класса DbIpCity
, который представляет некоммерческую базу данных, позволяет получить всю необходимую информацию по желаемому IP бесплатно. Атрибуты
city
, region
, country
хранят в себе информацию о городе, регионе и стране. А обратившись к атрибутам latitude
и longitude
можно получить широту и долготу. #ip
Защищаем исходный код обфускацией
Обфускация кода — это превращение исходного кода в нечитаемый для человека вид, при этом сохраняя всю функциональность программы.
Цель подобных действий заключается в защите скриптов. Обфускация делает анализ кода крайне сложным, а иногда и невозможным.
Таким образом, другим разработчикам становится проблематично получить и понять ваш исходный код для того, чтобы, например, взломать программу.
В Python есть отличная библиотека
#pyarmor
Обфускация кода — это превращение исходного кода в нечитаемый для человека вид, при этом сохраняя всю функциональность программы.
Цель подобных действий заключается в защите скриптов. Обфускация делает анализ кода крайне сложным, а иногда и невозможным.
Таким образом, другим разработчикам становится проблематично получить и понять ваш исходный код для того, чтобы, например, взломать программу.
В Python есть отличная библиотека
pyarmor
, предназначенная именно для этого. Пример использования этого пакета в терминале представлен выше на картинке. #pyarmor