12 ChatGPT Prompts That Turn Python Grunt Work Into Clean, Tested, Automated Code

Промты для 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

Три правила, которые повышают качество любого промта

  1. Контекст важнее вежливости. Версия Python, библиотека, схема данных, ожидаемое поведение — всё это снижает вероятность галлюцинаций.
  2. Просите объяснить, а не только написать. Формулировка «объясни, почему» заставляет модель опираться на реальные механизмы языка, а не на статистические паттерны.
  3. Проверяйте факты об API. Методы вроде datetime.utcnow() или asyncio.get_event_loop() меняли статус в разных версиях — сверяйтесь с официальной документацией Python (docs.python.org) и changelog библиотек.

Эти 12 промтов закрывают большую часть ежедневных задач Python-разработчика: от написания чистого кода до автоматизации рутины. Начните с двух-трёх сценариев, которые отнимают у вас больше всего времени, — и адаптируйте их под свой стек. Промт — это не магия, а инструмент: чем точнее вы формулируете задачу, тем меньше времени тратите на переписывание сгенерированного кода. Сохраните таблицу выше как шпаргалку и добавляйте свои шаблоны — со временем у вас соберётся личная библиотека промтов, которая будет работать быстрее любого поиска по Stack Overflow.

← All posts

Comments