Python Community
13.1K subscribers
1.24K photos
26 videos
15 files
712 links
Python Community RU - СНГ сообщество Python-разработчиков

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

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

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
⚡️ Библиотеки для создания телеграм ботов

• Python Telegram bot — довольно удобная и понятная библиотека с хорошей документацией. Отлично подойдёт для начала изучения работы ботов.

Установка: pip install python-telegram-bot

• Telebot — хорошая альтернатива предыдущей библиотеке. Также с полной документацией и большим количеством статей.

Установка: pip install pyTelegramBotAPI

• Telethon — более тяжёлая библиотека, чем две предыдущие, но с гораздо большим функционалом. Также есть возможность создавать пользователей и поддержка работы с async.

Установка: pip3 install telethon
Модуль random

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

random — самая популярная библиотека для создания псевдо-случайных чисел, с довольно большим функционалом.

randint(min, max) — возвращает случайное целое число.

randrange(start, stop) — возвращает случайное число в определённом промежутке.

choice(someList) — возвращает случайный элемент из списка

shuffle(someList) — перемешивает значения в списке
⚡️ Асинхронное программирование

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

Суть ассинхронного программирования такова — пока выполняется что-то одно, долгое, программа не останавливается, а продолжает выполнять свои задачи.

Для примера — пока вы ждёте приготовление торта (ожидание ответа от сервера) вы можете расставить тарелки (подготовка данных).

Самая популярная библиотека для данных задач — asyncio. Скачать её можно по следующей команде:

pip install asyncio
⚡️ Пример асинхроного программирования

Первым делом импортируем библиотеки: asyncio и aiohttp — она используется для асинхроного создания запросов.

После этого создаём функции с ожиданием и отправкой запроса.

Используя get_event_loop() получаем цикл, в котором работает ayncio, создаём список задач, используя create_task(func).

После этого, с помощью run_until_complete(asyncio.wait(tasks)) запускаем цикл и ожидаем его выполнения и закрываем цикл — close().

Скачайте код по ссылке ниже, чтобы увидеть результат.

💾 Скачать пример кода
⚡️ Строки в Python

Строки встречаются довольно часто во всех программах, поэтому было бы здорово уметь эффективно с ними работать.

Первое — срез.

С его помощью можно убрать некоторые элементы, причём не только в строках, но и в обычных списках.

Для этого следует использовать:

• someStr[1:9] — эта команда вернёт все значения от первого до девятого индекса

Также, есть несколько методов:

• replace(from, to) — метод, который заменяет все значения в списке с from на to.

• split(symbols) — метод, который позволяет разбить строку на список, используя символы, передаваемые в параметры

• format(*args, *kwargs) — форматирование строки. Очень удобный инструмент: он улучшает читабельность кода и упрощает его.

💾 Скачать пример кода
⚡️Корутины и таски в ассинхроном программировании

Корутины — это функции, определённые с помощью await или async.

Стоит отметить, что обычный вызов функции не выполняет её: для этого стоит использовать asyncio.run() или await.

Таски или задачи — те же самые корутины, но они запускаются одновременно.

Для их создания используют asyncio.create_task(), а виде параметра принимает корутину.

Для запуска программ одновременно, следует использовать asyncio.gather(*tasks).
Try, except, finally

В python мы довольно часто встречаемся с ошибками: деление на ноль, IndexError или, например, не правильное преобразование.

В таких случаях поможет конструкция try. Первым делом вы пишем действия внутри, которые собираемся выполнить. В случае, если возникнет ошибка, то except «поймает» её и выполнит указанные действия.

Блок finally выполняется всегда, независимо от того, возникло исключение или нет. Его часто используют для закрытия файлов или соединений.
JSON в python

JSON — JavaScript Object Notation. Это структурированные данные, понятные человеку.

Они, также называемые «словарём» часто используются при создании сайтов и игр.

Этот формат позволяет функциям «общаться» друг с другом, сохранять какие-то значения или представлять Настройки или любые другие данные, понятные пользователю.

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

Также, метод load используется для декодирования и позволяет считывать значения с файла напрямую.
⚡️ Пример бота на Telebot.

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

Начнём с того, что у нас есть файл с названием my_token.py. Внутри него хранится переменная с токеном бота, которую мы и импортируем.

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

• start_message()
— отправляет сообщение стартовое сообщение с кнопками внизу

• how_message() — выбирает случайное настроение и отвечает пользователю на его основе

• bot.pooling() — приостанавливает поток и ожидает сообщения от пользователя
⚡️ Кортеж, список, множество или словарь?

В Python часто встречаются эти понятия, но не все понимают, что это такое и чем они отличаются. Поэтому...

• Список — набор элементов, который может изменяться и индексироваться.

• Кортеж — набор элементов, которые не меняются, но также индексируется. Чаще всего его используют в функциях, которые возвращают какие-то значения, но их нельзя менять.

• Множество — набор элементов, которые могут меняться (зависит от способа создания). Он не индексируется, но его отличие в том, что все элементы ни разу не повторяются.

• Словарь — набор элементов типа ключ — значение. Ключи не могут меняться и являются "индексами", также они не должны повторятся. Значения могут и меняться, и повторятся.
⚡️ Классы и особые методы

Каждый раз, когда вы создаёте какой-либо класс, он наследуется от object.

Object имеет особые методы:

__init — инициализатор класса. Он вызывается тогда, когда класс создаётся.

str,
repr__— возвращает класс в виде строки. Разница между ними в том, что str должен вернуть боле «красивый» вывод.

__getatribute, setattr__ — вызывается методами getattr и setattr. Позволяют получать и задавать значения переменных классов.

__doc__ — документация для пользования классом. Также её можно создать используя многострочную строку после создания класса.
⚡️ Модули в Python

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

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

Импортировать его можно используя import, а если нужно взять какие-то определённые атрибуты — from module import attribute.

Также, если требуется создать псевдоним, стоит использовать ключевое слово as.

Для лучшего понимания, в одном из наших примеров мы уже импортировали собственные модули.
⚡️ Использование декораторов

Декораторы — это «обёртки» для функций, которые позволяют изменить поведение функции, при этом не меняя её код.

Создаются они очень просто:

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

Их можно использовать, например, в библиотеке Telethon, о чём мы писали тут.

Стоит отметить, что декораторы немного замедляют вызов функции, запрещают её задекорировать и слегка ухудшают отладку.
⚡️ Сетевые подключения в Python

На самом деле, всё проще, чем может показаться на первый взгляд. Первым делом нам надо импортировать модуль socket. Сделать это и сохранить его можно с помощью socket = socket.socket()

Также, для создания сервера, нужно привязать к нему порт. Воспользуемся bind(("ip", 9999)), который принимает запросы с IP. Его можно оставить пустым, если нужно пропускать любые IP.

После этого ожидаем подключения командой listen(count).

• count — это количество подключений одновременно.

• accept() — метод, который возвращает кортеж с классом соединения и адресом

Теперь нужно просто сделать клиент, используя connect(("ip", 9999)), чтобы подключиться к IP по порту 9999.
⚡️ Что выведет этот код?
⚡️ Типы функций

Всего в python можно выделить три функции: статические, функции класса (методы) и обычные.

Обычные — те, что мы создаём, используя обычный def. Они ничем особым не выделяются.

Методы — создаются внутри классов с помощью того же def. Их особенностью является то, что первым параметром они принимают свой класс. Чаще всего можно заметить их в виде self.

Статические функции — обычные методы, которые просто относятся к какому либо классу. Они не принимают self или что-то подобное. Определяются используя staticmethod.
⚡️ Простой пример бота на Python Telegram Bot

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

Этот пример выполняет те же функции, что и бот на telebot, но здесь вместо декораторов используются обычные методы.

Так, в библиотеке есть некий updater, который контролирует бота.

dispatcher позволяет настроить события и реакции на них, а selector — выбирает, какую функцию нужно вызывать на основе нажатой кнопки.

💾 Скачать пример бота
⚡️ Модуль logging

Без багов в жизни программиста — никуда, поэтому важно уметь их вовремя находить и исправлять.

Для этого существует много способов, но самый удобный из них — логирование. В python с этим поможет модуль logging.

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

Для этого воспользуйтесь logging.basicConfig(filename="sample.log", level=logging.INFO).

Теперь, с помощью getLogger("name") можно выделить логи для специальных приложений/действий.

Также, команда logger.setLevel(type) позволяет настроить уровень записи, например logging.DEBUG.
⚡️ Взаимодействие с окружением

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

Мы воспользовались импортированием собственного модуля, но есть ещё один интересный способ — environment.

Environment — это окружение ОС, внутри которого находятся различные данные. Используется при настройке программ и передачи каких либо значений.

Для получения значений окружения используют os.environ.

Это словарь, из которого можно получить данные с помощью ['some_value'].

Также, вы можете воспользоваться методом os.getenv(key, default), позволяющий настроить значение по умолчанию.