ru
Feedback
Pythoner

Pythoner

Открыть в Telegram

Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику. Сотрудничество - @flattys Цены - @serpent_media Канал на бирже: https://telega.in/c/pythonercode

Больше
6 620
Подписчики
Нет данных24 часа
-57 дней
-2930 день
Архив постов
1️⃣AIOGram: ➕Поддерживает асинхронное программирование, что позволяет эффективно обрабатывать множество запросов без блокиров
1️⃣AIOGram: ➕Поддерживает асинхронное программирование, что позволяет эффективно обрабатывать множество запросов без блокирования основного потока. ➕Хорошо документирована и имеет большое сообщество разработчиков. ➕Предоставляет обширный набор функций для работы с Telegram API. ➖Деплоится не на всех бесплатных сервисах. 2️⃣python-telegram-bot: ➕Простой в использовании и понимании, особенно для новичков в разработке телеграм-ботов. ➕Хорошо документирована и имеет активное сообщество разработчиков. ➕Предоставляет обширный набор функций для работы с Telegram API. ➖Не поддерживает асинхронное программирование, поэтому может быть неэффективным при обработке большого количества запросов одновременно. ➖Из-за синхронного подхода может возникать блокирование основного потока при выполнении долгих операций. 3️⃣telebot: ➕Простой в использовании и понимании. ➕Хорошо документирована и имеет небольшое, но активное сообщество разработчиков. ➕Предоставляет обширный набор функций для работы с Telegram API. ➖Не поддерживает асинхронное программирование, поэтому может быть неэффективным при обработке большого количества запросов одновременно. ➖Некоторые функции могут быть менее гибкими или сложными в использовании по сравнению с другими библиотеками. 4️⃣twx.botapi: ➕Простой в использовании и понимании, особенно для новичков в разработке телеграм-ботов. ➕Хорошо документирована и имеет некоторые примеры использования. ➕Предоставляет базовый набор функций для работы с Telegram API. ➖Ограничена в функциональности и не предоставляет некоторые продвинутые возможности, доступные в других библиотеках. ➖Неактивно поддерживается и может быть устаревшей. ❗️Выбор конкретной библиотеки зависит от ваших потребностей, уровня опыта и предпочтений в разработке. 🐍Pythoner

Разбор Все, что вам стоит знать - это // —> целочисленное деление .count —> считает количество повторений текста/символа в строке

Что выдаст код выше❔
Anonymous voting

photo content

✈️Контейнер — это объект, предназначенный для хранения других объектов. Контейнеры реализуют различные структуры данных, таки
✈️Контейнер — это объект, предназначенный для хранения других объектов. Контейнеры реализуют различные структуры данных, такие как списки, кортежи, словари, множества и другие. ➡️Основное назначение контейнеров — удобное и эффективное хранение и доступ к группам объектов. Контейнеры позволяют легко добавлять, удалять и итерировать элементы. ➡️Все контейнеры в Python реализуют общие методы, такие как len() для получения размера и contains() для проверки вхождения элемента. Это обеспечивает единый интерфейс работы с разными типами контейнеров. 🐍Pythoner

Знаете основы Python, но руки не доходят сделать первый шаг к практике? Сделайте его под руководствои опытного разработчика з
Знаете основы Python, но руки не доходят сделать первый шаг к практике? Сделайте его под руководствои опытного разработчика за полтора часа практики! Приглашаем вас на бесплатный практикум от преподавателя школы IT профессий Level Up - «Мой первый бот в Telegram» По окончании практикума вы СОЗДАДИТЕ БОТА С НУЛЯ ПОРАБОТАЕТЕ СО СТОРОННИМИ ПРИЛОЖЕНИЯМИ ДЛЯ СОЗДАНИЯ БОТА НАУЧИТЕСЬ РАЗВЕРТЫВАТЬ ПРИЛОЖЕНИЕ НА СЕРВЕРЕ Спикер практикума - Евгений Сергунин (Big Data аналитик в компании Wildberries)  Оставить заявку на практикум  Забронировать место на курсе «Python разработчик Junior» с выгодой 6000 рублей за раннее бронирование

Регистрируйтесь на главную конференцию Yandex Cloud! Большая конференция Yandex Cloud для тех, кто создаёт цифровые продукты
Регистрируйтесь на главную конференцию Yandex Cloud! Большая конференция Yandex Cloud для тех, кто создаёт цифровые продукты и решения. Вас ждут 5 тематических треков, 31 доклад, 50 экспертов, нетворкинг и общение. Участие бесплатное! Зарегистрироваться #реклама 16+ scale.yandex.cloud О рекламодателе

➡️Подготовка базы данных Прежде чем начать вставку внешних ключей, необходимо подготовить базу данных и создать таблицы, межд
➡️Подготовка базы данных Прежде чем начать вставку внешних ключей, необходимо подготовить базу данных и создать таблицы, между которыми мы будем устанавливать связи. Рассмотрим простой пример двух таблиц: authors и books. Таблица authors будет содержать информацию об авторах, а таблица books - информацию о книгах, написанных этими авторами. Для начала создадим эти таблицы с использованием языка SQL.
CREATE TABLE authors (
    author_id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE books (
    book_id SERIAL PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    author_id INT,
    FOREIGN KEY (author_id) REFERENCES authors (author_id)
);
➡️Вставка данных и внешних ключей с помощью Python Теперь, когда наша база данных готова, мы можем перейти к вставке данных и внешних ключей с помощью Python. Для этого нам понадобится библиотека psycopg2, которая позволяет взаимодействовать с PostgreSQL базой данных. Убедитесь, что она установлена:
pip install psycopg2
Далее, напишем скрипт на Python, который будет вставлять данные в таблицы authors и books, устанавливая соответствующие внешние ключи.
import psycopg2

# Соединение с базой данных
conn = psycopg2.connect(
    dbname="your_db_name",
    user="your_db_user",
    password="your_db_password",
    host="your_db_host",
    port="your_db_port"
)
cursor = conn.cursor()

# Вставка данных в таблицу authors
cursor.execute("INSERT INTO authors (name) VALUES (%s) RETURNING author_id", ("J.K. Rowling",))
author_id = cursor.fetchone()[0]

#Вставка данных в таблицу books с указанием внешнего ключа
cursor.execute("INSERT INTO books (title, author_id) VALUES (%s, %s)", ("Harry Potter", author_id))

# Сохранение изменений и закрытие соединения
conn.commit()
cursor.close()
conn.close()
➡️Проверка и управление целостностью данных Внешние ключи помогают поддерживать целостность данных в базе данных. Например, они не позволяют вставлять в таблицу books значения author_id, которых нет в таблице authors. Рассмотрим, как это работает на практике. Попробуем вставить книгу с несуществующим author_id и посмотрим, что произойдет.
try:
    cursor.execute("INSERT INTO books (title, author_id) VALUES (%s, %s)", ("Unknown Book", 999))
    conn.commit()
except psycopg2.IntegrityError as e:
    conn.rollback()
    print("Ошибка целостности данных: невозможно вставить книгу с несуществующим автором.")
В данном случае psycopg2 выбросит исключение IntegrityError, и мы сможем обработать его, откатив изменения и предупредив пользователя об ошибке. 🐍Pythoner

✈️Да, функции можно объявлять внутри других функций. Такая вложенная функция будет видна и доступна для вызова только внутри
✈️Да, функции можно объявлять внутри других функций. Такая вложенная функция будет видна и доступна для вызова только внутри родительской функции, в которой она определена. ➡️Это называется замыканием и позволяет ограничить область видимости вложенной функции, чтобы она не загрязняла глобальное пространство имен. 🔎Вложенные функции могут быть полезны, когда нужно реализовать вспомогательную логику, связанную только с работой родительской функции. 🐍Pythoner

➡️Django чуть медленнее Flask из-за своей более высокой функциональности и накладных расходов. Однако на практике разница в с
➡️Django чуть медленнее Flask из-за своей более высокой функциональности и накладных расходов. Однако на практике разница в скорости работы между ними незначительна для большинства веб-приложений. ➡️Flask может быть немного быстрее при обработке простых запросов, но Django лучше масштабируется при увеличении нагрузки благодаря встроенным инструментам кэширования и оптимизации. Кроме того, производительность в большей степени зависит от архитектуры и качества кода конкретного приложения. 🐍Pythoner

✈️В Django ORM можно использовать механизм миграций для изменения структуры базы данных без необходимости вручную вносить изм
✈️В Django ORM можно использовать механизм миграций для изменения структуры базы данных без необходимости вручную вносить изменения через SQL запросы. Миграции позволяют вам определять изменения в моделях и применять их к базе данных автоматически. ➡️Для начала работы с миграциями в Django необходимо создать начальное состояние базы данных, которое будет соответствовать текущим моделям вашего приложения. Для этого можно воспользоваться командой python manage.py makemigrations, которая создаст файл миграции в папке migrations вашего приложения. ➡️Затем, чтобы применить миграции к базе данных, можно воспользоваться командой python manage.py migrate, которая применит все необходимые изменения к базе данных. При этом Django будет автоматически отслеживать и применять новые миграции при изменениях в моделях. ➡️Миграции в Django ORM могут включать различные операции, такие как создание новых таблиц, добавление и удаление полей, изменение типа данных и многое другое. Кроме того, можно создавать собственные миграции с помощью команды python manage.py makemigrations --empty, чтобы определить свои собственные изменения в базе данных. 👀Использование миграций в Django ORM делает процесс изменения структуры базы данных более удобным и безопасным, позволяя сохранить целостность данных и избежать ошибок при ручном внесении изменений. 🐍Pythoner

✈️Иногда элементы массива изначально неизвестны, но массив для их хранения необходим сейчас. Поэтому в NumPy есть функции для
✈️Иногда элементы массива изначально неизвестны, но массив для их хранения необходим сейчас. Поэтому в NumPy есть функции для создания массива с исходным содержимым (по умолчанию тип массива — float64)
>>> import numpy as np
➡️zeros((n, m)) - создает массив нулей с размером n x m.
>>> np.zeros((3, 2))
array([[0., 0.],
[0., 0.],
[0., 0.]])
➡️ones((n, m)) - создает массив единиц с размером n x m.
>>> np.ones((2, 3))
array([[1., 1., 1.],
[1., 1., 1.]])

>>> np.ones((2, 2), dtype=np.int16)
array([[1, 1],
[1, 1]], dtype=int16)
➡️empty() - создает массив без заполнения. Исходное содержимое случайно и зависит от состояния памяти на момент создания массива (мусор, что в ней хранится).
>>> np.empty((2,2))
array([[5.e-324, 0.e+000],
[0.e+000, 5.e-324]])
📁Документация NumPy 🐍Pythoner

Repost from IT memer
😕Джун пытается предложить свою идею на общей встрече

👩‍💻 Программирование теперь в Telegram! Вот 8 обучающих каналов по самым востребованным направлениям в IT. Выбирай своё нап
👩‍💻 Программирование теперь в Telegram! Вот 8 обучающих каналов по самым востребованным направлениям в IT. Выбирай своё направление: 👩‍💻 Python: @python_ready 👩‍💻 Java: @java_ready 📖 Общее IT: @roadmap_ready 👩‍💻 Frontend: @code_ready 👩‍💻 C#: @csharp_ready 👩‍💻 C/C++: @cpp_ready 🖥 Базы Данных & SQL: @sql_ready 🖥 Design: @time_design 📌 Ресурсы, гайды, шпаргалки, книги, задачи и статьи для каждого языка программирования.

➡️Функция .upper() Функция .upper() в Python используется для преобразования всех символов в строке в верхний регистр. Это оч
➡️Функция .upper() Функция .upper() в Python используется для преобразования всех символов в строке в верхний регистр. Это очень полезно, когда вы хотите сравнить строки без учета регистра или обеспечить единообразие ввода данных. Пример использования:
text = 'Hello, World!'
print(text.upper())  # Вывод: 'HELLO, WORLD!'
➡️Функция .lower() С другой стороны, функция .lower() преобразует все символы строки в нижний регистр. Это также может быть полезно при сравнении строк или обеспечении единообразия ввода. Пример использования:
text = 'Hello, World!'
print(text.lower())  # Вывод: 'hello, world!'
➡️Применение .upper() и .lower() Функции .upper() и .lower() часто используются вместе для обеспечения единообразия ввода и процесса обработки данных. Например, вы можете преобразовать ввод пользователя в нижний регистр перед проверкой его в словаре, где все ключи хранятся в нижнем регистре. Таким образом, вы можете быть уверены, что ваш код будет работать независимо от того, как пользователь ввел данные. 🐍Pythoner

Обучаем Java-разработчиков оплата после выхода на работу В Kata Academy можно выучиться на Java-разработчика бесплатно, а зап
Обучаем Java-разработчиков оплата после выхода на работу В Kata Academy можно выучиться на Java-разработчика бесплатно, а заплатить уже после трудоустройства по специальности из фактической зарплаты. Если задуматься, то все в выигрыше: — ты получаешь работу в Москве или Санкт-Петербурге с хорошей зарплатой, мы получаем процент за инвестиции в тебя; — в наших интересах научить тебя так, чтобы твоя зарплата была как можно выше; — мы прокачиваем твои навыки еще 2 года после курса: проводим выездные мероприятия и мастер-классы — и доходы наших выпускников растут; — мы не зависим от банков и их рассрочек — кризис не повлиял на доступность курсов. Чтобы попасть на курс, нужно выполнить небольшое тестовое задание. Переходи по ссылке и оставляй заявку! Узнать больше #реклама 16+ kata.academy О рекламодателе

🔥И снова новый, но последний пост по пирогу. В прошлый раз я обещал научить вытаскивать данные из сообщения, этим и займёмся
🔥И снова новый, но последний пост по пирогу. В прошлый раз я обещал научить вытаскивать данные из сообщения, этим и займёмся! 🔎Давайте с начала просто посмотрим из чего состоит получаемый объект
@app.on_message(filters.command(["start"], prefixes="."))
async def start(_, msg):
    print(msg)
⬆️В результате увидим много всяких данных. Самые часто используемые - id, text, from_user, chat reply_to_message(сообщение на которое ответили). ➡️Чтобы достать определенное значение надо перечислить ключи к нему через точку: ➖msg.text msg.chat.id ➖msg.reply_to_message.date ➡️Теперь попробуем на практике, поприветствуем новых участников в группе
@app.on_message(filters.chat([123,456]) & filters.new_chat_members)
async def welcome(_, msg):
    new_members = [u.mention for u in msg.new_chat_members]
    text = 'Привет, ' + ", ".join(new_members) + "!"
    await msg.reply(text, True disable_web_page_preview=True)
⬆️Разберем этот код 💬Создаем Декоратор: 💬📰Из определенных чатов ([123,456]) 💬📰Для новых участников 💬Создаем функцию И тут начинается самое то, что нас интересует 💬Перебираем список новых участников, и из них берем параметр mention - имя с ссылкой. 💬Формируем текст сообщения, соеденяя список из новый участников с помощью *str.join()* (о нем мы говорили в прошлом посте ) 💬Отвечаем на сообщение ответом и без предпросмотора ссылок 👀Итог Мы научились доставать данные из сообщения и вспомнили фильтры с обработчиками. Надеюсь это серия постов вам понравилась. 🐍Pythoner

🔥Продолжаем! ➡️Мы уже умеем создавать обработчики, теперь надо научится что-то делать, а не только принимать. В пироге функц
🔥Продолжаем! ➡️Мы уже умеем создавать обработчики, теперь надо научится что-то делать, а не только принимать. В пироге функции отправки чего-либо начинаются на "send" - app.send_message, например. ➡️Чтобы детально разобраться в какой-то функции - надо заглянуть в документацию! Кстати, у pyrogram она очень удобная и понятная ⛓https://docs.pyrogram.org ⛓ ⬆️Нам нужен метод который отвечает за отправку сообщения. В документации слева в менюшке ищем Available Methods (Доступные методы) - далее - send_message (отправить сообщение). И видим полное описание этого метода, что он делает, какие параметры принимает, что возвращает и примеры. ➡️Сразу под названием видим описание метода, то что он делает
Send text messages.
То есть
(отправляет текстовое сообщение)
➡️Ниже список параметров которые нужно в него передать. Давайте его разберем.
chat_id (int | str) – Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use “me” or “self”. For a contact that exists in your Telegram address book you can use his phone number (str).
Или же
(chat_id (int | str) — уникальный идентификатор (int) или имя пользователя (str) целевого чата. Для вашего личного облака (сохраненных сообщений) вы можете просто использовать «me» или «self». Для контакта, который существует в вашей адресной книге Telegram, вы можете использовать его номер телефона (str))
В самое первое — название параметра далее в скобках тип данных. "|" - это "или", "либо". Если в скобках есть оptional, то это значит что этот аргумент не обязательный. И последнее - описание. ⬆️Из цитаты нам становится понятно, что chat_id принимает ID чата в виде строки либо числа, либо номер телефона, либо "me"|"self" если надо отправить себе в избранное. ❔Второй параметр разберите сами
text (str) – Text of the message to be sent.
text (str) – Текст отправляемого сообщения.
тут совсем легко, так что, думаю, все справились, сюда надо передать строку с отправляемым текстом 👀В итоге, отправлять сообщения надо так:
await app.send_message(chat_id, "text")
❕Обратите внимание, что в начале я поставил await. Если вы новичок - то просто ставьте перед методами await и все, а если вы уже что-то знаете, то объяснять не надо) ➡️Bound Methods Самые внимательные заметили, что в документации крок Available Methods есть еще Bound Methods (Связанные методы) Их фишка в том, что это методы сообщений которые мы получаем из хендлера (параметр msg). Например, чтобы изменить сообщение, не обязательно писать app.edit-бла-бла-бла, а можно просто msg.edit(). В него просто передаем строку и готово! 💬Задание: Пользуясь документацией, выясните что делает msg.reply() и какие параметры он принимает. ➡️Вернёмся в редактор кода Теперь вспоминаем все что учили и соберём знания вместе. Сделаем так, чтобы при написании команды .start сообщение изменялось на Python Pyrogram!
from pyrogram import Client, filters

app = Client("UserBot", 123, "abc")

@app.on_message(filters.command(["start"], prefixes=".") & filters.me)
async def start(_, msg):
    await msg.edit("Python Pyrogram!")

app.run()
👀Итоги: Сегодня мы научились работать с документацией, и научились изменять сообщения. А в следующем посте научимся получать из сообщения данные - его текст, отправитель, и тп. 🐍Pythoner

✈️Сегодня продолжим тему предыдущего поста и начнём создавать бота ➡️Начнем с самой базы - установки. python -m pip install p
✈️Сегодня продолжим тему предыдущего поста и начнём создавать бота ➡️Начнем с самой базы - установки.
python -m pip install pyrogram
🚀Для быстрой работы пирога лучше еще установить
python -m pip install TgCrypto
👀Теперь можно и код писать ➡️Импорт: Импорт тут максимально простой. Просто из pyrogram импортируем модули через from / import:
from pyrogram import Client # потом ещё будем добавлять
➡️Создание объекта бота: Как и в любом другом боте нам нужен объект, с помощью которого уже и осуществляется работа. В пироге это экземпляр принято называть app. В него нужно передать 💬Название, строка 💬API_ID, строка либо число (int) 💬API_HASH, строка Про API_ID и API_HASH поговорим чуток позже.
app = Client("MyFirstUserBot", api_id, api_hash)
➡️Обработчики: Обработчики (хендлеры, handler) это функции, которые срабатывают при определенном событии, например, при новом сообщении. В Pyrogram они в виде декорратора который начинается на "on" (с англ - при), наример @app.on_message, @app.on_chat_join_request. В декоратор следует передать фильтр, по которому будут выбираться случаи когда нужно чтобы обработчик сработал. В библиотеке есть встроенные фильтры, их надо импортировать, но их можно и самому написать (научимся позже) ➡️Как я говорил в предыдущем посте, нам нужно обрабатывать команды. Для этого, логично, надо создать обработчик сообщений, с фильтром, что это команда, и то что написали ее мы (мы ведь не хотим чтобы другие командовали вашим ботом?)
@app.on_message(filters.command(["start"], prefixes=".") & filters.me)
async def start(_, msg):
    pass
❕У обработчиков должен быть строгий порядок - от конкретных (например, команды), до более общих (всех сообщений) Правильный порядок хендлеров сообщений должен выглядеть так: ⚫ Команды ⚫ Сообщения с какими-то триггерами (например, если в слове есть слово "привет") ⚫ Все сообщения ➡️Запуск: Обработчики прописали, теперь пора это все дело запустить! Тут всё просто:
app.run()
➡️API_ID / API_HASH: И, самое главное, без чего наш код ни в коем случае не заработает - данные телеграмма. Как я говорил выше, ЮзерБота, как бы входит в твой аккаунт. Ему конечно же нужны данные. Это и есть api_id и api_hash ✈️ Заходим на сайт https://my.telegram.org/apps пишем свой номер телефона, на котором тг, и вводим код. ❔Это безопасно, это сайт телеграмма Далее там будет бланк, вы его заполняете. Данные можете писать какие угодно, они ни на что не влияют. Вы должны дойти то страницы с конфигурацией приложение (App Configuration). Там копируете app api_id и app api_hash, и вставляете в код, там где создавали екземпляр бота (app = ...)
from pyrogram import Client, filters

app = Client("тут", "ваши", "данные")

@app.on_message(filters.commands(["start"], prefixes=".") & filters.me)
async def start(_, msg):
    pass

app.run()
🔎Итоги: Сегодня мы разобрались в базовой структуре ЮзерБота: поговорили про нужные классы, обработчики, их порядок, API данные. В следующем посте поговорим про отправку сообщений, редактирование, и тп. 🐍Pythoner