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
Postlar arxiv
🐍 Как сделать свой 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!

🧠 Прокачай мозг с NonoQuest! 🧩 Хочешь не просто убивать время, а тренировать мышление? Попробуй NonoQuest — увлекательные я
🧠 Прокачай мозг с NonoQuest! 🧩 Хочешь не просто убивать время, а тренировать мышление? Попробуй NonoQuest — увлекательные японские кроссворды (нонограммы), где логика превращается в яркие пиксельные картинки! 🎨 ✨ Тренируй логику и внимание 🔍 Развивай концентрацию 💡 Поддерживай умственную активность Регулярные интеллектуальные занятия полезны для когнитивного здоровья. 🎮 NonoQuest — устрой мозгу полезную разминку! 📱 Игра для Android. Попробуй разгадать свою первую головоломку!

🐍 Как создать 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. Его можно распечатать или отправить гостям, чтобы они подключились к сети без ручного ввода пароля. 🔥 Где пригодится: — дома для гостей — в кафе и офисах — в отелях — в небольших автоматизациях

🎲 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 = []. Исключение — если тебе нужен общий объект (например, кеш).

Заказ на 100 рублей. Три комментария. В отчете 300. Где ошибка? Бесплатное SQL-упражнение "Сбой найден": намеренно сломанный
Заказ на 100 рублей. Три комментария. В отчете 300. Где ошибка? Бесплатное SQL-упражнение "Сбой найден": намеренно сломанный отчет, 10 автоматических проверок, подсказки и эталонное решение. Задача --- исправить расчет, сохранив правильный результат для пустых заказов и разных позиций с одинаковой стоимостью. Для запуска нужен Python 3.11+ со стандартным sqlite3. Отдельный сервер и установка зависимостей не требуются. Данные учебные. В архиве также 10 карточек backend-сбоев с диагностикой и проверкой исправлений. Это бесплатная часть коммерческого практикума; обязательной покупки и отзыва нет. Архив без регистрации: https://tglink.io/1b80e56c9d2a50?erid=2W5zFG56jWZ Реклама. Романов С.Г. ИНН 772589517063.

🧙‍♂️Секреты 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

🖥 Срезы (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]  (разворот списка)
⚡ Итог: срезы позволяют легко работать с последовательностями без циклов и лишнего кода!

🖥 Как превратить 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"])
🔥 Полезно для: — обработки таблиц — импорта данных — небольших скриптов — автоматизации отчётов

Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Пр
Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Прозрачная оплата без скрытых платежей ✅ Более 200 000 клиентов доверяют Beget Узнать больше

🔄 Генераторы и 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 отдаёт результат по частям, не занимая память. Генераторы можно объединять в цепочки — как трубы. Если данных много или они бесконечны — только генераторы спасут.

Python с нуля: автоматизируйте то, на что сейчас уходят часы Курс для тех, кто никогда не программировал, но уже работает с E
Python с нуля: автоматизируйте то, на что сейчас уходят часы Курс для тех, кто никогда не программировал, но уже работает с Excel и данными. За короткий курс вы освоите базу Python с нуля и сразу начнёте применять её в рабочих задачах: — объединять Excel-файлы — обрабатывать большие таблицы — строить сводные и графики — работать с датами и текстом — автоматизировать повторяющиеся действия Без лишней теории — только база языка и практические задачи, которые помогают экономить время уже в процессе обучения. За несколько недель выучить язык с нуля 👉@tea4erman_bot

🎯 Как выглядеть как мидл, даже если ты джун 💡 Мидл — это не про годы опыта, а про то, как ты работаешь с задачами. Даже будучи джуном, ты можешь выглядеть как уверенный разработчик. Вот как. 👍 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 — помогает получить фидбек, повысить доверие и быстрее вырасти.

Написать скрипт - двадцать минут удовольствия. Обложить его тестами и докстрингами, чтобы не стыдно было в репозиторий закину
Написать скрипт - двадцать минут удовольствия. Обложить его тестами и докстрингами, чтобы не стыдно было в репозиторий закинуть - задача на весь остаток рабочего дня. CatCode - агент, который сделает всю рутину за тебя: гоняет линтер, рефакторит, пишет тесты и докстринги пока ты занят логикой, а не бумажной работой вокруг неё. Доступны все топовые модели: 😒 Claude Opus 5 🤖 GPT-6 Astra 😐 Grok 4.6 и многие другие. Умный свитчер экономит токены - рутина уйдёт дешёвой модели, сложные задачи - нейросети покруче. Один лимит, который дешевле зоопарка отдельных подписок - всего за 900 рублей в месяц. Оплата картой РФ или СБП, работает без VPN. Первые задачи бесплатно, просто зарегистрируйся и попробуй сам. Оставь рутину агенту, пока листаешь ленту: catcode.dev

👩‍💻 Библиотеки для ленивых: когда хочется больше делать с меньшими усилиями Каждый программист знает: кодить можно быстрее, если использовать проверенные решения. В 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()
👉 Лёгкая настройка, удобная обработка аргументов и флагов. 🗣️ Запомни: используй библиотеки, чтобы минимизировать шаблонный код, повысить читаемость и улучшить производительность разработки.

Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Пр
Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Прозрачная оплата без скрытых платежей ✅ Более 200 000 клиентов доверяют Beget Узнать больше #реклама 16+ beget.com О рекламодателе

📐 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 связывает тип с метаданными. Вместе они делают код самодокументируемым и надёжным.

🖥 Как превратить список в строку одной командой Допустим, есть список слов:

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() - список → строку

🖥 Как запустить несколько задач одновременно в 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-вычисления быстрее — он особенно хорош для задач, где много ожидания.

🔍Тестовое собеседование на Middle Python с разработчиком из Авито завтра вечером Уже завтра вечером в 19:00 по мск приходи о
🔍Тестовое собеседование на Middle Python с разработчиком из Авито завтра вечером Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Дане Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.

🖥 Как автоматически отправить 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() — отправляет письмо 🔥 На этом можно сделать: — автоматические отчёты — уведомления о сбоях — отправку файлов — ежедневные рассылки ⚠️ Пароль лучше не хранить прямо в коде — используй переменные окружения или секреты.