Введение
Скорость разработки на 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 — это помощник, а не замена разработчика: всегда проверяйте и адаптируйте сгенерированный код. Экспериментируйте, делитесь своими лучшими промтами в комментариях и повышайте свою продуктивность уже сегодня!
Комментарии