Промты для Python-разработки: 12 сценариев от чистого кода до автоматизации рутины
В 2026 году Python-разработчик без грамотно составленных промтов теряет не часы, а дни. Ассистенты на базе LLM уже давно пишут юнит-тесты, объясняют чужой код и превращают CSV в готовый пайплайн, но только если вы умеете задавать правильный вопрос. Разница между «напиши мне функцию» и структурированным промтом с контекстом, версией Python и ожидаемым поведением — это разница между бесполезным сниппетом и кодом, который можно сразу закоммитить.
Эта подборка собрана из реальной практики: 12 промтов для типовых задач Python-разработчика — от генерации запросов и рефакторинга до отладки, тестирования и автоматизации рутины. Каждый промт — с примером использования и пояснением, для какой задачи он подходит.
1. Генерация чистого кода с типизацией (Python 3.12+)
Задача: получить не абстрактный сниппет, а готовый модуль с аннотациями типов, docstring и обработкой ошибок.
Промт:
Ты — senior Python-разработчик. Напиши функцию на Python 3.12 для [описание задачи]. Требования: полная аннотация типов (PEP 484), docstring в стиле Google, обработка исключений через конкретные типы (не голый
except Exception), логирование через модульlogging. Не используй устаревшие конструкции. Верни только код без пояснений.
Пример:
# Промт: "...функцию для парсинга ISO 8601 даты из строки с возвратом datetime"
from datetime import datetime
import logging
logger = logging.getLogger(__name__)
def parse_iso_datetime(value: str) -> datetime:
"""Парсит строку в формате ISO 8601 в объект datetime.
Args:
value: Строка, например '2026-09-28T12:00:00+03:00'.
Returns:
Объект datetime с учётом таймзоны.
Raises:
ValueError: Если строка не соответствует ISO 8601.
"""
try:
return datetime.fromisoformat(value)
except ValueError as exc:
logger.error("Invalid ISO 8601 string: %s", value)
raise ValueError(f"Not an ISO 8601 datetime: {value!r}") from exc
Почему работает: явное указание версии Python и стиля docstring убирает «галлюцинации» вроде datetime.utcnow() — метода, который помечен deprecated в Python 3.12 (см. официальный changelog Python 3.12).
2. Генерация SQL-запросов и ORM-кода
Задача: быстро перевести бизнес-требование в SQL или в запрос SQLAlchemy.
Промт:
У меня есть таблицы PostgreSQL: users(id, email, created_at), orders(id, user_id, amount, status, created_at). Напиши SQL-запрос, который возвращает email пользователей и сумму их заказов за последние 30 дней со статусом 'paid', отсортированных по сумме убыванию. Затем тот же запрос на SQLAlchemy 2.0 в стиле select().
Пример результата:
from datetime import datetime, timedelta
from sqlalchemy import select, func
cutoff = datetime.now() - timedelta(days=30)
stmt = (
select(User.email, func.sum(Order.amount).label("total"))
.join(Order, Order.user_id == User.id)
.where(Order.status == "paid", Order.created_at >= cutoff)
.group_by(User.email)
.order_by(func.sum(Order.amount).desc())
)
Совет: указывайте конкретную версию ORM — синтаксис SQLAlchemy 2.0 отличается от 1.4 (legacy Query API помечен deprecated).
3. Рефакторинг «спагетти-кода»
Задача: превратить запутанную функцию в читаемую.
Промт:
Отрефактори этот код, следуя принципам SOLID и PEP 8. Раздели ответственность на отдельные функции, убери вложенность через early return, добавь типизацию. Объясни каждое изменение в 1 строку. Не меняй внешнее поведение функции.
Пример: функция на 60 строк с тремя уровнями вложенности if обычно превращается в 3–4 небольшие функции с явными именами. Ключевое правило — просить «не менять поведение», иначе LLM может незаметно переписать логику.
4. Оптимизация производительности
Задача: ускорить медленный участок кода.
Промт:
Профилировщик показал, что 80% времени уходит в эту функцию. Предложи 3 варианта оптимизации с оценкой сложности Big-O. Учти, что данные — список из ~1 млн словарей. Рассмотри: замену циклов на генераторы, использование collections, переход на numpy/polars, кэширование через functools.lru_cache. Для каждого варианта напиши бенчмарк на timeit.
Пример: поиск в списке словарей через next((d for d in items if d['id'] == target), None) — O(n). Если запросов много, замена на индекс-словарь {d['id']: d for d in items} даёт доступ O(1) после однократной подготовки за O(n).
5. Отладка и объяснение ошибок
Задача: быстро понять трейсбек.
Промт:
У меня ошибка [полный traceback]. Вот минимальный воспроизводимый пример: [код]. Объясни, почему она возникает, назови конкретную строку и предложи исправление. Если причина в версии библиотеки — укажи, в какой версии поведение изменилось.
Пример: частый случай — RuntimeError: Event loop is closed при работе с asyncio и aiohttp. Причина — повторное использование закрытого event loop. Решение — создавать новый loop или использовать asyncio.run() вместо ручного get_event_loop().
6. Генерация юнит-тестов
Задача: покрыть функцию тестами без ручного перебора кейсов.
Промт:
Напиши pytest-тесты для этой функции. Требования: параметризация через @pytest.mark.parametrize, покрытие happy path, граничных случаев (пустой ввод, None, максимальные значения) и исключений через pytest.raises. Используй фикстуры для подготовки данных. Целевое покрытие — не менее 90% строк.
Пример:
import pytest
from mymodule import parse_iso_datetime
@pytest.mark.parametrize("value,expected_year", [
("2026-09-28T12:00:00+03:00", 2026),
("1999-01-01T00:00:00Z", 1999),
])
def test_parse_valid(value: str, expected_year: int) -> None:
assert parse_iso_datetime(value).year == expected_year
@pytest.mark.parametrize("bad", ["", "not-a-date", "2026-13-01"])
def test_parse_invalid(bad: str) -> None:
with pytest.raises(ValueError):
parse_iso_datetime(bad)
7. Автоматизация работы с файлами и папками
Задача: рутинные операции — переименование, сортировка, конвертация.
Промт:
Напиши скрипт на pathlib (не os.path), который обходит папку рекурсивно, находит все .csv-файлы, переименовывает их по шаблону YYYY-MM-DD_original.csv на основе даты из имени, и перемещает в подпапки по месяцам. Добавь dry-run режим и логирование.
Пример: такой скрипт заменяет ручную сортировку сотен файлов. Использование pathlib.Path вместо строковых путей — рекомендация из официальной документации Python (PEP 428).
8. Парсинг данных и веб-скрейпинг
Задача: собрать данные с сайта.
Промт:
Напиши парсер с использованием httpx и selectolax (или BeautifulSoup) для страницы [URL]. Собери поля: название, цена, ссылка. Добавь retry с exponential backoff, User-Agent, задержку между запросами, обработку 429 и 5xx. Учти, что сайт может подгружать данные через JavaScript — если так, предложи вариант с Playwright.
Важно: уточните у LLM про robots.txt и лимиты — этичный скрейпинг требует уважения к правилам сайта.
9. Работа с pandas и большими данными
Задача: очистка и агрегация датасета.
Промт:
У меня DataFrame с колонками [список]. Напиши цепочку операций pandas для: удаления дубликатов по ключу, заполнения пропусков медианой по группам, приведения типов, группировки и агрегации. Используй method chaining и не мутируй исходный DataFrame. Если данных больше 5 млн строк — предложи вариант на polars.
Пример:
clean = (
df.drop_duplicates(subset=["order_id"])
.assign(amount=lambda d: d["amount"].fillna(d.groupby("user_id")["amount"].transform("median")))
.astype({"user_id": "int64"})
)
10. Работа с API и асинхронность
Задача: параллельно опросить несколько API.
Промт:
Напиши асинхронный клиент на httpx.AsyncClient, который делает 100 запросов к API с ограничением concurrency через asyncio.Semaphore(10). Добавь таймауты, retry и сбор ошибок без падения всего батча. Верни список успешных ответов и список ошибок.
Пример: классическая ошибка новичков — requests в цикле. Асинхронный вариант с семафором ускоряет I/O-bound задачи на порядок и не перегружает целевой API.
11. Документирование и docstring
Задача: привести проект к единому стандарту документации.
Промт:
Добавь docstring в стиле Google ко всем публичным функциям и классам в этом файле. Для каждого параметра — тип и назначение. Добавь пример использования для главной функции. Не меняй логику кода.
Пример: инструмент вроде pydocstyle или ruff (правило D) проверит соответствие PEP 257 после генерации.
12. Автоматизация рутины через CLI-утилиты
Задача: превратить одноразовый скрипт в переиспользуемую команду.
Промт:
Оберни этот скрипт в CLI на Typer (или argparse). Добавь команды: run, validate, export. Параметры — через опции с дефолтами, вывод — с прогресс-баром через tqdm. Добавь
--verboseдля логирования. Сделай точку входа черезif __name__ == "__main__".
Пример:
import typer
from pathlib import Path
app = typer.Typer()
@app.command()
def run(input_dir: Path, verbose: bool = False) -> None:
"""Обработать все файлы в директории."""
if verbose:
typer.echo(f"Processing {input_dir}")
# ... логика
if __name__ == "__main__":
app()
Сводная таблица: какой промт под какую задачу
| Задача | Промт | Ключевой приём |
|---|---|---|
| Новый модуль | №1 | Указать версию Python и PEP |
| Запрос к БД | №2 | Дать схему таблиц |
| Улучшить код | №3 | «Не менять поведение» |
| Ускорить | №4 | Просить Big-O и бенчмарки |
| Починить баг | №5 | Полный traceback |
| Покрыть тестами | №6 | parametrize + pytest.raises |
| Файлы | №7 | pathlib + dry-run |
| Скрейпинг | №8 | retry + robots.txt |
| pandas | №9 | method chaining |
| API | №10 | asyncio.Semaphore |
| Docstring | №11 | Стиль Google |
| CLI | №12 | Typer + tqdm |
Три правила, которые повышают качество любого промта
- Контекст важнее вежливости. Версия Python, библиотека, схема данных, ожидаемое поведение — всё это снижает вероятность галлюцинаций.
- Просите объяснить, а не только написать. Формулировка «объясни, почему» заставляет модель опираться на реальные механизмы языка, а не на статистические паттерны.
- Проверяйте факты об API. Методы вроде
datetime.utcnow()илиasyncio.get_event_loop()меняли статус в разных версиях — сверяйтесь с официальной документацией Python (docs.python.org) и changelog библиотек.
Эти 12 промтов закрывают большую часть ежедневных задач Python-разработчика: от написания чистого кода до автоматизации рутины. Начните с двух-трёх сценариев, которые отнимают у вас больше всего времени, — и адаптируйте их под свой стек. Промт — это не магия, а инструмент: чем точнее вы формулируете задачу, тем меньше времени тратите на переписывание сгенерированного кода. Сохраните таблицу выше как шпаргалку и добавляйте свои шаблоны — со временем у вас соберётся личная библиотека промтов, которая будет работать быстрее любого поиска по Stack Overflow.
Comments