20 промтов для Python-разработчика: автоматизируем рутину и пишем чистый код с AI-ассистентом

Введение

Скорость разработки на Python часто ограничена не сложностью алгоритмов, а временем на рутинные операции: написание шаблонного кода, отладку, рефакторинг. AI-ассистенты, такие как GitHub Copilot, Amazon CodeWhisperer или ChatGPT, способны ускорить эти процессы, но их эффективность напрямую зависит от качества промтов — инструкций, которые вы даёте модели. В этой подборке я собрал проверенные промты, которые помогут вам генерировать код быстрее и качественнее, не теряя контроль над результатом.

Многие разработчики используют AI-ассистентов интуитивно, получая посредственные результаты. Системный подход к составлению промтов позволяет сократить время на разработку в разы. По данным исследования GitHub (2022), использование Copilot ускоряет выполнение задач на 55%, но при правильных промтах этот показатель может быть значительно выше.

В статье вы найдёте 10 промтов, разбитых по уровням сложности: от простых функций до сложных алгоритмов. Каждый промт сопровождается примером кода и пояснением, как он экономит время. Все примеры протестированы на Python 3.10+.

Базовые промты

1. Генерация функции по описанию

Задача: Быстро создать функцию с заданными параметрами и возвращаемым значением.

Промт:

Напиши функцию на Python, которая принимает список чисел и возвращает их среднее арифметическое. Обработай случай пустого списка, вернув 0. Добавь докстринг и аннотации типов.

Пример результата:

from typing import List

def average(numbers: List[float]) -> float:
    """
    Вычисляет среднее арифметическое списка чисел.

    :param numbers: Список чисел.
    :return: Среднее арифметическое или 0, если список пуст.
    """
    if not numbers:
        return 0.0
    return sum(numbers) / len(numbers)

Экономия времени: Вместо 5 минут на написание и проверку — 30 секунд.

2. Генерация класса с методами

Задача: Создать класс с инициализацией и несколькими методами.

Промт:

Создай класс на Python для представления банковского счёта. У него должны быть методы: пополнение, снятие, получение баланса. При снятии больше баланса выбрасывай исключение ValueError. Используй аннотации типов и докстринги.

Пример результата:

class BankAccount:
    """Класс для управления банковским счётом."""

    def __init__(self, initial_balance: float = 0.0) -> None:
        """Инициализация счёта с начальным балансом."""
        if initial_balance < 0:
            raise ValueError("Начальный баланс не может быть отрицательным")
        self.balance = initial_balance

    def deposit(self, amount: float) -> None:
        """Пополнение счёта на указанную сумму."""
        if amount <= 0:
            raise ValueError("Сумма пополнения должна быть положительной")
        self.balance += amount

    def withdraw(self, amount: float) -> None:
        """Снятие средств со счёта."""
        if amount <= 0:
            raise ValueError("Сумма снятия должна быть положительной")
        if amount > self.balance:
            raise ValueError("Недостаточно средств")
        self.balance -= amount

    def get_balance(self) -> float:
        """Возвращает текущий баланс."""
        return self.balance

Экономия времени: 10 минут → 1 минута.

3. Написание unit-тестов

Задача: Автоматически сгенерировать тесты для существующей функции.

Промт:

Напиши unit-тесты с использованием pytest для функции average из предыдущего примера. Покрой случаи: пустой список, список с одним элементом, список с положительными и отрицательными числами.

Пример результата:

import pytest
from mymodule import average

def test_average_empty():
    assert average([]) == 0.0

def test_average_single():
    assert average([5]) == 5.0

def test_average_positive():
    assert average([1, 2, 3, 4]) == 2.5

def test_average_negative():
    assert average([-1, -2, -3]) == -2.0

Экономия времени: 15 минут → 2 минуты.

Продвинутые промты

4. Рефакторинг кода

Задача: Улучшить читаемость и производительность существующего кода.

Промт:

Отрефактори следующий код на Python, сделав его более читаемым и эффективным. Используй генераторы списков, где возможно, и добавь аннотации типов. Объясни изменения.

Пример результата:
Исходный код:

def process_items(items):
    result = []
    for item in items:
        if item > 0:
            result.append(item * 2)
    return result

После рефакторинга:

from typing import List

def process_items(items: List[int]) -> List[int]:
    return [item * 2 for item in items if item > 0]

Объяснение: Использован генератор списка для сокращения кода, добавлены аннотации типов.

Экономия времени: 5 минут → 1 минута.

5. Оптимизация алгоритма

Задача: Ускорить работу функции, например, заменив O(n^2) на O(n log n).

Промт:

Оптимизируй следующий код на Python, который находит дубликаты в списке. Текущая сложность O(n^2). Предложи решение с меньшей сложностью и объясни его.

Пример результата:
Исходный код:

def find_duplicates(lst):
    duplicates = []
    for i in range(len(lst)):
        for j in range(i+1, len(lst)):
            if lst[i] == lst[j] and lst[i] not in duplicates:
                duplicates.append(lst[i])
    return duplicates

Оптимизированный:

from collections import Counter
from typing import List

def find_duplicates(lst: List[int]) -> List[int]:
    counts = Counter(lst)
    return [item for item, count in counts.items() if count > 1]

Объяснение: Использован Counter для подсчёта вхождений, сложность O(n).

Экономия времени: 20 минут → 3 минуты.

6. Генерация документации

Задача: Создать документацию для модуля или функции.

Промт:

Сгенерируй документацию в формате reStructuredText для следующего класса. Включи описание, параметры, возвращаемые значения и примеры использования.

Пример результата:

.. class:: BankAccount(initial_balance: float = 0.0)

   Класс для управления банковским счётом.

   :param initial_balance: Начальный баланс счёта.
   :type initial_balance: float

   .. method:: deposit(amount: float) -> None

      Пополняет счёт на указанную сумму.

      :param amount: Сумма пополнения.
      :type amount: float
      :raises ValueError: Если сумма не положительна.

   .. method:: withdraw(amount: float) -> None

      Снимает средства со счёта.

      :param amount: Сумма снятия.
      :type amount: float
      :raises ValueError: Если сумма не положительна или превышает баланс.

   .. method:: get_balance() -> float

      Возвращает текущий баланс.

      :return: Текущий баланс.
      :rtype: float

Экономия времени: 30 минут → 5 минут.

Экспертные промты

7. Генерация сложного алгоритма

Задача: Реализовать алгоритм, например, быструю сортировку или обход графа.

Промт:

Напиши реализацию алгоритма Дейкстры на Python для поиска кратчайших путей в взвешенном графе. Используй кучу для оптимизации. Добавь комментарии и пример использования.

Пример результата:

import heapq
from typing import Dict, List, Tuple

def dijkstra(graph: Dict[str, List[Tuple[str, int]]], start: str) -> Dict[str, int]:
    """
    Алгоритм Дейкстры для поиска кратчайших путей.

    :param graph: Граф в виде словаря смежности.
    :param start: Начальная вершина.
    :return: Словарь расстояний до всех вершин.
    """
    distances = {vertex: float('infinity') for vertex in graph}
    distances[start] = 0
    queue = [(0, start)]

    while queue:
        current_distance, current_vertex = heapq.heappop(queue)

        if current_distance > distances[current_vertex]:
            continue

        for neighbor, weight in graph[current_vertex]:
            distance = current_distance + weight

            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(queue, (distance, neighbor))

    return distances

# Пример использования
graph = {
    'A': [('B', 1), ('C', 4)],
    'B': [('C', 2), ('D', 5)],
    'C': [('D', 1)],
    'D': []
}
print(dijkstra(graph, 'A'))  # {'A': 0, 'B': 1, 'C': 3, 'D': 4}

Экономия времени: 1 час → 5 минут.

8. Интеграция с внешними API

Задача: Написать код для взаимодействия с REST API.

Промт:

Напиши функцию на Python для получения данных о погоде с OpenWeatherMap API. Используй библиотеку requests, обработай ошибки и возвращай температуру в Цельсиях. API-ключ передаётся в переменной окружения.

Пример результата:

import os
import requests
from typing import Optional

def get_temperature(city: str) -> Optional[float]:
    """
    Получает текущую температуру в указанном городе.

    :param city: Название города.
    :return: Температура в Цельсиях или None в случае ошибки.
    """
    api_key = os.getenv('OPENWEATHER_API_KEY')
    if not api_key:
        raise ValueError("API-ключ не найден в переменных окружения")

    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()
        data = response.json()
        return data['main']['temp']
    except requests.RequestException as e:
        print(f"Ошибка при запросе: {e}")
        return None

Экономия времени: 30 минут → 5 минут.

9. Создание декоратора

Задача: Написать декоратор для измерения времени выполнения функции.

Промт:

Напиши декоратор на Python, который измеряет время выполнения функции и логирует его. Декоратор должен работать с функциями, принимающими любые аргументы.

Пример результата:

import time
import functools
from typing import Callable, Any

def timing_decorator(func: Callable) -> Callable:
    @functools.wraps(func)
    def wrapper(*args: Any, **kwargs: Any) -> Any:
        start_time = time.perf_counter()
        result = func(*args, **kwargs)
        end_time = time.perf_counter()
        print(f"Функция {func.__name__} выполнилась за {end_time - start_time:.4f} секунд")
        return result
    return wrapper

@timing_decorator
def slow_function():
    time.sleep(1)

slow_function()  # Функция slow_function выполнилась за 1.0002 секунд

Экономия времени: 15 минут → 2 минуты.

10. Генерация кода для асинхронных задач

Задача: Написать асинхронный код для параллельных запросов.

Промт:

Напиши асинхронную функцию на Python, которая выполняет несколько HTTP-запросов параллельно с использованием aiohttp и asyncio. Обработай ошибки и верни список результатов.

Пример результата:

import asyncio
import aiohttp
from typing import List, Optional

async def fetch_url(session: aiohttp.ClientSession, url: str) -> Optional[str]:
    try:
        async with session.get(url) as response:
            return await response.text()
    except Exception as e:
        print(f"Ошибка при запросе {url}: {e}")
        return None

async def fetch_all(urls: List[str]) -> List[Optional[str]]:
    async with aiohttp.ClientSession() as session:
        tasks = [fetch_url(session, url) for url in urls]
        return await asyncio.gather(*tasks)

# Пример использования
async def main():
    urls = ['https://example.com', 'https://python.org']
    results = await fetch_all(urls)
    print(results)

asyncio.run(main())

Экономия времени: 40 минут → 5 минут.

Как внедрить промты в рабочий процесс

Чтобы получать стабильно хорошие результаты, следуйте этим рекомендациям:

  • Будьте конкретны: указывайте входные и выходные данные, ограничения, стиль кода.
  • Итеративно улучшайте: если результат не идеален, уточняйте промт.
  • Проверяйте код: AI может допускать ошибки, всегда тестируйте сгенерированный код.
  • Используйте контекст: передавайте модели существующий код для согласованности.

Сравнение времени выполнения задач с AI и без (на основе личного опыта автора):

Задача Без AI С AI Ускорение
Написание функции 5 мин 0.5 мин 10x
Написание тестов 15 мин 2 мин 7.5x
Рефакторинг 10 мин 1 мин 10x
Документация 30 мин 5 мин 6x

Заключение

Промты для генерации кода — это мощный инструмент, который при правильном использовании значительно ускоряет разработку на Python. Начните с базовых промтов, постепенно переходите к продвинутым и экспертным. Помните, что AI — это помощник, а не замена разработчика: всегда проверяйте и адаптируйте сгенерированный код. Экспериментируйте, делитесь своими лучшими промтами в комментариях и повышайте свою продуктивность уже сегодня!

← Все статьи

Комментарии

Читайте также

Промты для облачной архитектуры: как проектировать отказоустойчивые системы в AWS, GCP и Azure и не разориться

15 октября 2026

За пределами SOC 2 Type II: дорожная карта соответствия на 2026-2027 годы для SaaS-команд эпохи ИИ

15 октября 2026

AWS Solutions Architect Professional (SAP-C02): стоит ли учиться в 2026 и как это влияет на зарплату

15 октября 2026

Налоговое право РФ: как подготовиться к изменениям 2026 года и освоить новую профессию

15 октября 2026

Промты для PlatformIO и VS Code: ускоряем прошивку, отладку и энергосбережение STM32, ESP32 и Arduino в IoT-проектах

14 октября 2026

Как UX-дизайнеру автоматизировать юзабилити-тестирование и документацию Figma с помощью 15 готовых промтов

14 октября 2026

30 промтов для GitLab CI и Helm: автоматизируем деплой, автоскейлинг и ночные инциденты через ChatGPT

14 октября 2026

12 промтов для отладки I2C, SPI и UART на микроконтроллерах: практикум по прошивкам и IoT-протоколам

14 октября 2026

Промты для DevOps: как перестать тушить пожары в Docker и Kubernetes и начать спать по ночам

14 октября 2026