uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

PytStart | Программирование на Python

PytStart | Программирование на Python

Kanalga Telegram’da o‘tish

Python: примеры кода, уроки, статьи Купить рекламу: https://telega.in/c/pytstart ✍️По всем вопросам: @Pascal4eg

Ko'proq ko'rsatish
4 180
Obunachilar
-424 soatlar
-137 kun
-5930 kun

Ma'lumotlar yuklanmoqda

O'xshash kanallar
Ma'lumot yo'q
Muammo bormi? Iltimos, sahifani yangilang yoki bizning qo'llab-quvvatlash boshqaruvchimizga murojaat qiling>.
Kirish va chiqish esdaliklari
---
---
---
---
---
---
Obunachilarni jalb qilish
Okt '26
Oktabr '26
+7
0 kanalda
Sentabr '26
+20
0 kanalda
Get PRO
Avgust '26
+36
9 kanalda
Get PRO
Iyul '26
+5
0 kanalda
Get PRO
Iyun '26
+68
0 kanalda
Get PRO
May '26
+110
10 kanalda
Get PRO
Aprel '26
+24
0 kanalda
Get PRO
Mart '26
+58
8 kanalda
Get PRO
Fevral '26
+30
3 kanalda
Get PRO
Yanvar '26
+20
0 kanalda
Get PRO
Dekabr '25
+79
25 kanalda
Get PRO
Noyabr '25
+102
11 kanalda
Get PRO
Oktabr '25
+17
0 kanalda
Get PRO
Sentabr '25
+24
6 kanalda
Get PRO
Avgust '25
+351
30 kanalda
Get PRO
Iyul '25
+286
21 kanalda
Get PRO
Iyun '25
+304
31 kanalda
Get PRO
May '25
+383
32 kanalda
Get PRO
Aprel '25
+496
34 kanalda
Get PRO
Mart '25
+845
49 kanalda
Get PRO
Fevral '25
+3 212
123 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
28 Oktabr0
27 Oktabr0
26 Oktabr0
25 Oktabr0
24 Oktabr0
23 Oktabr0
22 Oktabr0
21 Oktabr0
20 Oktabr0
19 Oktabr0
18 Oktabr0
17 Oktabr0
16 Oktabr+1
15 Oktabr0
14 Oktabr0
13 Oktabr0
12 Oktabr+1
11 Oktabr+1
10 Oktabr0
09 Oktabr+1
08 Oktabr0
07 Oktabr0
06 Oktabr0
05 Oktabr0
04 Oktabr+1
03 Oktabr+2
02 Oktabr0
01 Oktabr0
Kanal postlari
🐍 Как сделать свой API на Python за пару минут Хочешь создать API, к которому смогут обращаться другие программы? Для этого есть FastAPI 🚀 📦 Установка:

pip install fastapi uvicorn
💻 Создаём `main.py`:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
    return {"message": "Привет, мир!"}

@app.get("/user/{name}")
def get_user(name: str):
    return {
        "name": name,
        "message": f"Привет, {name}!"
    }
🚀 Запускаем сервер:

uvicorn main:app --reload
Теперь открой в браузере: - http://127.0.0.1:8000/ — приветственное сообщение - http://127.0.0.1:8000/user/Alex — персональный ответ - http://127.0.0.1:8000/docs — интерактивная документация API 💡 Почему FastAPI крутой? 🔥 Автоматически создаёт документацию ⚡ Поддерживает асинхронность 📦 Проверяет типы входных данных 🛠️ Подходит для микросервисов и backend-разработки Всего несколько строк — и у тебя уже есть работающий API!

2
🧠 Прокачай мозг с NonoQuest! 🧩 Хочешь не просто убивать время, а тренировать мышление? Попробуй NonoQuest — увлекательные я
🧠 Прокачай мозг с NonoQuest! 🧩 Хочешь не просто убивать время, а тренировать мышление? Попробуй NonoQuest — увлекательные японские кроссворды (нонограммы), где логика превращается в яркие пиксельные картинки! 🎨 ✨ Тренируй логику и внимание 🔍 Развивай концентрацию 💡 Поддерживай умственную активность Регулярные интеллектуальные занятия полезны для когнитивного здоровья. 🎮 NonoQuest — устрой мозгу полезную разминку! 📱 Игра для Android. Попробуй разгадать свою первую головоломку!
277
3
🐍 Как создать QR-код из Wi-Fi, чтобы подключаться без пароля Можно сделать QR-код, который при сканировании предложит подключиться к Wi-Fi. Для этого понадобится библиотека qrcode. 📦 Установка: pip install "qrcode[pil]" 💻 Код: import qrcode ssid = "MyWiFi" password = "mypassword123" wifi = f"WIFI:T:WPA;S:{ssid};P:{password};;" img = qrcode.make(wifi) img.save("wifi_qr.png") print("QR-код создан!") 📌 Что означают параметры? - T — тип защиты сети - S — название Wi-Fi - P — пароль После запуска появится файл wifi_qr.png. Его можно распечатать или отправить гостям, чтобы они подключились к сети без ручного ввода пароля. 🔥 Где пригодится: — дома для гостей — в кафе и офисах — в отелях — в небольших автоматизациях
425
4
🎲 Mutable vs Immutable: список в аргументах функции — неожиданный баг В Python есть два типа объектов: immutable (строки, числа, кортежи) и mutable (списки, словари, множества). Разница кажется очевидной, пока не сталкиваешься с функциями и дефолтными аргументами. ⚡️ Классический баг: изменяемый аргумент по умолчанию def add_item(item, bucket=[]): bucket.append(item) return bucket print(add_item("🍎")) # ['🍎'] print(add_item("🍌")) # ['🍎', '🍌'] ❌ ➡️ Список создаётся один раз при определении функции. Все вызовы делят его между собой. 🔍 Почему так происходит? Python вычисляет значения аргументов по умолчанию при определении функции, а не при каждом вызове. То есть bucket=[] создаётся один раз и живёт всё время жизни функции. ✅ Как правильно: использовать None def add_item(item, bucket=None): if bucket is None: bucket = [] bucket.append(item) return bucket print(add_item("🍎")) # ['🍎'] print(add_item("🍌")) # ['🍌'] ➡️ Теперь список создаётся каждый раз заново, если аргумент не передан. 🧪 Практика: словари ведут себя так же def register_user(name, db={}): db[name] = True return db print(register_user("Alice")) # {'Alice': True} print(register_user("Bob")) # {'Alice': True, 'Bob': True} ❌ ✔️ Исправляем через None: def register_user(name, db=None): if db is None: db = {} db[name] = True return db 📦 Когда это реально нужно? Иногда специально используют «общий объект по умолчанию»: def cache_query(query, cache={}): if query in cache: return cache[query] result = f"Выполнил {query}" cache[query] = result return result ➡️ Все вызовы делят одно хранилище. Это работает как встроенный кеш. 🧠 Immutable так не ломаются def add_one(x=0): return x + 1 print(add_one()) # 1 print(add_one()) # 1 ➡️ С числами, строками, кортежами проблем нет — они неизменяемые. 🗣 Запомни: Не используй изменяемые объекты в дефолтных аргументах. Безопасный паттерн: arg=None, потом if arg is None: arg = []. Исключение — если тебе нужен общий объект (например, кеш).
564
5
Заказ на 100 рублей. Три комментария. В отчете 300. Где ошибка? Бесплатное SQL-упражнение "Сбой найден": намеренно сломанный
Заказ на 100 рублей. Три комментария. В отчете 300. Где ошибка? Бесплатное SQL-упражнение "Сбой найден": намеренно сломанный отчет, 10 автоматических проверок, подсказки и эталонное решение. Задача --- исправить расчет, сохранив правильный результат для пустых заказов и разных позиций с одинаковой стоимостью. Для запуска нужен Python 3.11+ со стандартным sqlite3. Отдельный сервер и установка зависимостей не требуются. Данные учебные. В архиве также 10 карточек backend-сбоев с диагностикой и проверкой исправлений. Это бесплатная часть коммерческого практикума; обязательной покупки и отзыва нет. Архив без регистрации: https://tglink.io/1b80e56c9d2a50?erid=2W5zFG56jWZ Реклама. Романов С.Г. ИНН 772589517063.
266
6
🧙‍♂️Секреты f-строк: выражения, форматирование и даже вызов функций внутри f-строки Ты думал, f-строки — это просто f"Hello {name}"? А что если я скажу, что туда можно засовывать функции, арифметику и даже условия? Вот мощный разбор, как выжать максимум из f-строк в Python 👇 🟢 1. Арифметика прямо в строке a, b = 10, 3 print(f"Сумма: {a + b}, Разность: {a - b}") 🟢 Внутри фигурных скобок можно писать полноценные выражения. ➡️ Да хоть f"Результат: {(a * b) ** 2}" — это законно. 🟢2. Функции внутри f-строки def shout(name): return name.upper() + "!" print(f"Привет, {shout('Алиса')}") 🟢 Вызов функций? Да. Лямбды? Тоже можно. Даже f"{sorted([3,1,2])}" работает. 🟢3. Условия и тернарные выражения age = 20 print(f"{'Совершеннолетний' if age >= 18 else 'Несовершеннолетний'} пользователь") 🟢 Отлично работает с любыми if ... else внутри {}. 🟢4. Форматирование чисел по-человечески value = 12345.6789 print(f"{value:.2f}") # 12345.68 print(f"{value:,.2f}") # 12,345.68 ➡️ :.2f — два знака после запятой ➡️ :, — добавляет разделитель тысяч 🟢5. Форматирование по ширине и выравниванию name = "Alice" print(f"{name:>10}") # справа print(f"{name:<10}") # слева print(f"{name:^10}") # по центру 🟢 Работает с числами и строками. Полезно в логах и таблицах. 🟢 6. Форматирование как hex, bin, oct num = 42 print(f"{num:b}") # 101010 print(f"{num:x}") # 2a 👍 b — двоичная 👍 x — шестнадцатеричная 👍 o — восьмеричная 🟢 7. Вложенные f-строки и шаблоны user = {"name": "Eva", "points": 120} print(f"{user['name']} набрала {f'{user['points'] * 2}'} очков") 🟢 Иногда полезно, но лучше избегать слишком сложной вложенности. 💡 Запомни ✅f-строки — это не просто вставка переменных ✅Используй форматирование, условия, вызовы функций ✅Удобно для логов, отчётов, динамического UI, и шаблонов CLI
610
7
🖥 Срезы (slices) в Python позволяют удобно извлекать части последовательностей (списки, строки, кортежи) с помощью синтаксиса: sequence[start:stop:step] 🔹start – начальный индекс (по умолчанию 0). 🔹stop – конечный индекс (не включается!). 🔹step – шаг (по умолчанию 1). 📌 Примеры: lst = [0, 1, 2, 3, 4, 5] print(lst[1:4]) # [1, 2, 3] (элементы с индекса 1 по 3) print(lst[:3]) # [0, 1, 2] (с начала до индекса 2) print(lst[::2]) # [0, 2, 4] (каждый второй элемент) print(lst[::-1]) # [5, 4, 3, 2, 1, 0] (разворот списка) ⚡ Итог: срезы позволяют легко работать с последовательностями без циклов и лишнего кода!
757
8
🖥 Как превратить CSV в словарь Python CSV часто используется для хранения таблиц. А загрузить его в Python можно буквально за несколько строк 👇 import csv with open("users.csv", encoding="utf-8") as file: users = list(csv.DictReader(file)) print(users[0]) # Alex users.csv выглядит так: name,age,city Alex,25,Moscow Anna,22,Kazan 💡 А дальше с данными можно работать как с обычными словарями: for user in users: if int(user["age"]) >= 25: print(user["name"]) 🔥 Полезно для: — обработки таблиц — импорта данных — небольших скриптов — автоматизации отчётов
798
9
Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Пр
Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Прозрачная оплата без скрытых платежей ✅ Более 200 000 клиентов доверяют Beget Узнать больше
275
10
🔄 Генераторы и yield: как делать ленивые вычисления и экономить память Обычные функции в Python возвращают всё сразу. Генераторы — по частям. Это «ленивые» вычисления: результат отдаётся только тогда, когда он нужен. Экономия памяти и скорость работы на больших данных становятся колоссальными. ⚡️ Простейший пример с yield def numbers(): yield 1 yield 2 yield 3 for n in numbers(): print(n) ➡️ Функция не возвращает список, а отдаёт значения по одному. 📂 Чтение больших файлов построчно def read_file(path): with open(path, "r") as f: for line in f: yield line.strip() for line in read_file("big.log"): print(line) ➡️ Файл читается строчка за строчкой, без загрузки всего в память. ♾️ Бесконечные последовательности def counter(start=0): while True: yield start start += 1 for n in counter(): if n > 5: break print(n) ➡️ Генератор может выдавать элементы бесконечно. Список так сделать нельзя. 🔗 Пайплайны генераторов def numbers(): for i in range(10): yield i def squared(seq): for x in seq: yield x * x for x in squared(numbers()): print(x) ➡️ Одни генераторы передают данные другим. Получается конвейер обработки. 🛠 Генераторные выражения squares = (x*x for x in range(1_000_000)) print(next(squares)) # 1 print(next(squares)) # 4 ➡️ Почти как list comprehension, но без хранения всех элементов в памяти. 🟢 Где это реально нужно: 🟢обработка логов и CSV гигабайтного размера; 🟢потоковые данные (сокеты, API); 🟢построение бесконечных последовательностей; 🟢конвейеры обработки (map/filter без лишних списков). 🗣️ Запомни:yield отдаёт результат по частям, не занимая память. Генераторы можно объединять в цепочки — как трубы. Если данных много или они бесконечны — только генераторы спасут.
743
11
Python с нуля: автоматизируйте то, на что сейчас уходят часы Курс для тех, кто никогда не программировал, но уже работает с E
Python с нуля: автоматизируйте то, на что сейчас уходят часы Курс для тех, кто никогда не программировал, но уже работает с Excel и данными. За короткий курс вы освоите базу Python с нуля и сразу начнёте применять её в рабочих задачах: — объединять Excel-файлы — обрабатывать большие таблицы — строить сводные и графики — работать с датами и текстом — автоматизировать повторяющиеся действия Без лишней теории — только база языка и практические задачи, которые помогают экономить время уже в процессе обучения. За несколько недель выучить язык с нуля 👉@tea4erman_bot
286
12
🎯 Как выглядеть как мидл, даже если ты джун 💡 Мидл — это не про годы опыта, а про то, как ты работаешь с задачами. Даже будучи джуном, ты можешь выглядеть как уверенный разработчик. Вот как. 👍 1. Не пиши код сразу — начни с понимания Мидл сначала понимает задачу, уточняет детали, разбивает её на части — и только потом пишет код. # ❌ Джун: # Просто пишет как-нибудь # ✅ Мидл: # Планирует — какие модули затронет, где могут быть ошибки, какие кейсы проверить 👍 2. Всегда думай про edge cases Мидлы знают, что код без тестов на крайние случаи — потенциальная мина. def divide(a, b): return a / b # ✅ А если b = 0? 👍 3. Дай коду имя и порядок Пиши функции с понятными именами, дели на модули, убирай мусор. Мидл пишет поддерживаемый код — это важно. # ❌ def f(x): return x*2 # ✅ def double_price(price: float) -> float: return price * 2 👍 4. Будь предсказуемым Мидлы не изобретают велосипеды. Используй стандартные конструкции, идиоматичный Python, pathlib, enumerate, with, dataclass, typing. 👍 5. Спрашивай правильно Не “у меня не работает 😢”, а “я делаю X, жду Y, получаю Z. Вот код. Пробовал уже A и B.” Это — уровень. И его видно сразу. 🗣 Пиши как мидл, спрашивай как мидл, думай как мидл — и к тебе начнут относиться как к мидлу. 📍 Где применимо: На стажировках, джуниор-работе, open source — помогает получить фидбек, повысить доверие и быстрее вырасти.
596
13
Написать скрипт - двадцать минут удовольствия. Обложить его тестами и докстрингами, чтобы не стыдно было в репозиторий закину
Написать скрипт - двадцать минут удовольствия. Обложить его тестами и докстрингами, чтобы не стыдно было в репозиторий закинуть - задача на весь остаток рабочего дня. CatCode - агент, который сделает всю рутину за тебя: гоняет линтер, рефакторит, пишет тесты и докстринги пока ты занят логикой, а не бумажной работой вокруг неё. Доступны все топовые модели: 😒 Claude Opus 5 🤖 GPT-6 Astra 😐 Grok 4.6 и многие другие. Умный свитчер экономит токены - рутина уйдёт дешёвой модели, сложные задачи - нейросети покруче. Один лимит, который дешевле зоопарка отдельных подписок - всего за 900 рублей в месяц. Оплата картой РФ или СБП, работает без VPN. Первые задачи бесплатно, просто зарегистрируйся и попробуй сам. Оставь рутину агенту, пока листаешь ленту: catcode.dev
380
14
👩‍💻 Библиотеки для ленивых: когда хочется больше делать с меньшими усилиями Каждый программист знает: кодить можно быстрее, если использовать проверенные решения. В Python куча библиотек, которые делают работу за тебя — не нужно изобретать велосипед. 1. `pathlib` — путь к лёгкости работы с путями Ты всё ещё юзаешь os.path? Пора остановиться. pathlib — это объектно-ориентированная альтернатива, которая позволяет работать с путями проще и чище. Пример: from pathlib import Path p = Path("/home/user/docs") print(p / "file.txt") # /home/user/docs/file.txt 👉 Это значительно читаемее и проще, чем старые подходы с os.path. 2. `requests` — HTTP без головной боли HTTP-запросы — одна из самых часто используемых операций, но с ними можно запутаться. requests делает этот процесс понятным и удобным. Пример: import requests response = requests.get('https://api.example.com/data') print(response.json()) 👉 Всё! Нет лишнего кода, никаких ненужных сложностей. 3. `pydantic` — валидация данных с минимальными усилиями Если тебе нужно проверять данные, а писать вручную кучу кода — не хочется, используй pydantic. Эта библиотека позволяет быстро проверять и валидировать данные, обрабатывая JSON, параметры и модели. Пример: from pydantic import BaseModel class User(BaseModel): name: str age: int user = User(name="Alice", age=30) print(user) 👉 Валидация без лишних усилий и работы с типами. Всё автоматически. 4. `attrs` — создание классов без ненужного кода Если ты создаёшь классы, но не хочешь писать лишние методы вроде __init__, __repr__, __eq__, то тебе в помощь attrs. Эта библиотека позволяет легко создавать классы с автоматическим заполнением всех необходимых методов. Пример: import attr @attr.s class Point: x = attr.ib() y = attr.ib() p = Point(3, 4) print(p) # Point(x=3, y=4) 👉 Быстро, удобно, без лишних усилий. 5. `click` — консольные приложения без мук Создание CLI-интерфейсов может быть утомительным, но с click это делается быстро и без боли. Ты можешь создавать простые и мощные консольные команды с минимальными усилиями. Пример: import click @click.command() @click.argument('name') def greet(name): click.echo(f"Hello, {name}!") greet() 👉 Лёгкая настройка, удобная обработка аргументов и флагов. 🗣️ Запомни: используй библиотеки, чтобы минимизировать шаблонный код, повысить читаемость и улучшить производительность разработки.
421
15
Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Пр
Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Прозрачная оплата без скрытых платежей ✅ Более 200 000 клиентов доверяют Beget Узнать больше #реклама 16+ beget.com О рекламодателе
308
16
📐 Typing: TypedDict, Literal, Annotated в реальных проектах Аннотации типов в Python — это не только int и str. Для сложных сценариев есть мощные инструменты: TypedDict, Literal, Annotated. Они помогают писать код понятнее и ловить ошибки ещё на этапе разработки. 📦 TypedDict — словари со строгой схемой from typing import TypedDict class User(TypedDict): id: int name: str is_admin: bool u: User = {"id": 1, "name": "Иван", "is_admin": False} ➡️ Теперь IDE и mypy знают структуру словаря. Ошибку в ключе или типе отловишь сразу. 🎯 Literal — фиксированные значения from typing import Literal def set_status(status: Literal["NEW", "IN_PROGRESS", "DONE"]) -> None: print(f"Статус: {status}") set_status("NEW") # ✅ set_status("INVALID") # ❌ mypy отловит ➡️ Полезно, когда параметр должен принимать строго ограниченные значения. 🧩 Annotated — тип + метаданные from typing import Annotated from dataclasses import dataclass @dataclass class User: id: Annotated[int, "DB Primary Key"] email: Annotated[str, "must be valid email"] ➡️ Аннотации становятся документацией и могут использоваться библиотеками (например, валидацией в FastAPI). ⚡️ TypedDict с опциональными ключами class Config(TypedDict, total=False): debug: bool log_level: str cfg: Config = {"debug": True} # ok ➡️ total=False позволяет делать часть ключей необязательными. 🔄 Literal в связке с Enum from typing import Literal Role = Literal["user", "admin", "moderator"] def check_role(role: Role): ... ➡️ Даёт компактную альтернативу Enum, если не нужно хранить методы. 📑 Annotated для валидации данных В FastAPI: from typing import Annotated from fastapi import Query def read_items(size: Annotated[int, Query(ge=1, le=100)]): return {"size": size} ➡️Ограничения накладываются прямо через типы, без лишнего кода. 🧠 Совмещение инструментов class Product(TypedDict): id: int status: Literal["active", "archived"] def process(p: Product): ... ➡️ Получается словарь со строгой схемой и фиксированным набором значений. 🗣️ Запомни: TypedDict даёт строгие словари, Literal ограничивает набор значений, Annotated связывает тип с метаданными. Вместе они делают код самодокументируемым и надёжным.
580
17
🖥 Как превратить список в строку одной командой Допустим, есть список слов: words = ["Python", "это", "просто", "🔥"] Можно быстро объединить их через join(): text = " ".join(words) print(text) 👉 Получим: Python это просто 🔥 А если нужен другой разделитель: csv = ", ".join(words) print(csv) 👉 Python, это, просто, 🔥 💡 Очень удобно, когда нужно собрать строку из множества элементов. 🔥 Например, вывести список тегов: tags = ["python", "backend", "coding"] print("#" + " #".join(tags)) Результат: #python #backend #coding 📌 Запомни простое правило: split() - строку → список join() - список → строку
683
18
🖥 Как запустить несколько задач одновременно в Python Если есть несколько задач, которые ждут сеть или другие внешние операции, можно выполнять их конкурентно с asyncio ⚡ import asyncio async def task(name, delay): await asyncio.sleep(delay) print(f"{name} готова") async def main(): await asyncio.gather( task("Задача 1", 2), task("Задача 2", 1), task("Задача 3", 3), ) asyncio.run(main()) 💡 Здесь три задачи запускаются конкурентно. ⏱️ Вместо ожидания примерно 2 + 1 + 3 = 6 секунд программа закончит примерно за 3 секунды - по времени самой долгой задачи. 🔥 Особенно полезно для: — запросов к API — загрузки данных — сетевых приложений — Telegram-ботов ⚠️ asyncio не делает обычные CPU-вычисления быстрее — он особенно хорош для задач, где много ожидания.
846
19
🔍Тестовое собеседование на Middle Python с разработчиком из Авито завтра вечером Уже завтра вечером в 19:00 по мск приходи о
🔍Тестовое собеседование на Middle Python с разработчиком из Авито завтра вечером Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Дане Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.
284
20
🖥 Как автоматически отправить email с Python Можно отправлять письма прямо из Python — например, уведомления об ошибках или отчёты 📩 import smtplib from email.message import EmailMessage msg = EmailMessage() msg["Subject"] = "Отчёт" msg["From"] = "you@example.com" msg["To"] = "user@example.com" msg.set_content("Отчёт готов!") with smtplib.SMTP_SSL("smtp.example.com", 465) as smtp: smtp.login("you@example.com", "PASSWORD") smtp.send_message(msg) 💡 Что здесь происходит: 📨 EmailMessage — создаёт письмо 🔐 login() — авторизация на SMTP-сервере 🚀 send_message() — отправляет письмо 🔥 На этом можно сделать: — автоматические отчёты — уведомления о сбоях — отправку файлов — ежедневные рассылки ⚠️ Пароль лучше не хранить прямо в коде — используй переменные окружения или секреты.
819