Промты для Python-разработчика: 12 запросов, которые ускоряют написание кода, рефакторинг и отладку
Python — один из самых популярных языков программирования, и с развитием AI-инструментов работа с ним становится быстрее и эффективнее. В этой подборке — 12 проверенных промтов для ChatGPT (и других LLM), которые помогут писать код, рефакторить legacy, отлаживать баги и писать тесты. Каждый промт — с шаблоном, примером и пояснением.
1. Генерация функции с типизацией и docstring
Задача: быстро создать функцию с аннотациями типов и документацией.
Промт:
Напиши на Python функцию, которая {описание задачи}. Используй аннотации типов (typing), добавь docstring в стиле Google. Входные данные: {список параметров}. Выход: {тип возвращаемого значения}. Учти обработку исключений: {какие ошибки обрабатывать}.
Пример:
Напиши на Python функцию, которая вычисляет среднее значение списка чисел, игнорируя None. Используй аннотации типов, docstring в стиле Google. Входные данные: list[float | None]. Выход: float. Учти обработку пустого списка (вернуть 0.0).
Результат:
from typing import List, Optional
def average_ignore_none(values: List[Optional[float]]) -> float:
"""Вычисляет среднее значение чисел, игнорируя None.
Args:
values: Список чисел, может содержать None.
Returns:
Среднее значение или 0.0, если список пуст.
"""
filtered = [v for v in values if v is not None]
return sum(filtered) / len(filtered) if filtered else 0.0
2. Рефакторинг legacy-кода
Задача: улучшить читаемость и современность старого кода.
Промт:
Отрефактори следующий код на Python, чтобы он соответствовал PEP 8, использовал современные возможности (f-строки, генераторы, контекстные менеджеры). Убери дублирование, улучши имена переменных. Объясни изменения.
Пример:
# Исходный код
def process(data):
res = []
for i in range(len(data)):
if data[i] % 2 == 0:
res.append(data[i] * 2)
return res
Ответ AI:
def process(data: list[int]) -> list[int]:
"""Удваивает чётные числа в списке."""
return [x * 2 for x in data if x % 2 == 0]
3. Поиск багов в коде
Задача: найти ошибки и потенциальные проблемы.
Промт:
Проанализируй код на Python и найди все возможные баги, логические ошибки и потенциальные исключения. Предложи исправления с пояснениями.
Пример:
def get_user(users, id):
for user in users:
if user['id'] == id:
return user
return None
# Вызов
data = get_user(users, '123')
print(data['name'])
Что найдёт AI:
- Если пользователь не найден, вернётся None, а затем data['name'] вызовет TypeError.
- Сравнение id: если в users id — числа, а передана строка, может не найти.
Исправление:
def get_user(users: list[dict], user_id: int) -> dict | None:
return next((u for u in users if u['id'] == user_id), None)
user = get_user(users, 123)
if user:
print(user['name'])
else:
print("Пользователь не найден")
4. Написание тестов pytest
Задача: сгенерировать тесты для функции.
Промт:
Напиши тесты на pytest для следующей функции. Покрой крайние случаи: пустой ввод, неверные типы, граничные значения. Используй фикстуры и параметризацию.
Пример: для функции average_ignore_none.
Ответ AI:
import pytest
from mymodule import average_ignore_none
@pytest.mark.parametrize("values, expected", [
([1.0, 2.0, None, 3.0], 2.0),
([], 0.0),
([None, None], 0.0),
([5], 5.0),
])
def test_average_ignore_none(values, expected):
assert average_ignore_none(values) == expected
5. Оптимизация производительности
Задача: ускорить медленный код.
Промт:
Этот код на Python работает медленно. Предложи оптимизации с использованием встроенных функций, генераторов, кэширования. Оцени сложность до и после.
Пример:
# Медленно: многократный вызов len
result = []
for i in range(len(data)):
if data[i] > 0:
result.append(data[i] ** 2)
Оптимизация:
result = [x ** 2 for x in data if x > 0]
6. Работа с asyncio
Задача: преобразовать синхронный код в асинхронный.
Промт:
Перепиши этот синхронный код на асинхронный с использованием asyncio. Добавь обработку исключений и таймауты. Поясни, где нужны await.
Пример:
import requests
def fetch_all(urls):
return [requests.get(url).text for url in urls]
Асинхронная версия:
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def fetch_all(urls):
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
return await asyncio.gather(*tasks)
7. Генерация классов с dataclass
Задача: создать класс для хранения данных.
Промт:
Создай класс на Python с использованием @dataclass для {описание}. Добавь валидацию полей в __post_init__, методы сравнения и сериализации в dict.
Пример:
from dataclasses import dataclass, asdict
from datetime import date
@dataclass
class User:
name: str
age: int
email: str
def __post_init__(self):
if self.age < 0:
raise ValueError("Возраст не может быть отрицательным")
if "@" not in self.email:
raise ValueError("Некорректный email")
def to_dict(self):
return asdict(self)
8. Работа с pandas
Задача: выполнить сложные манипуляции с DataFrame.
Промт:
У меня есть DataFrame с колонками {список}. Напиши код на pandas для {описание задачи}: группировка, агрегация, фильтрация. Используй method chaining.
Пример:
# Задача: для каждого department посчитать среднюю зарплату и отфильтровать > 50000
result = (df.groupby('department')['salary']
.mean()
.reset_index()
.query('salary > 50000'))
9. Создание API на FastAPI
Задача: быстро сгенерировать эндпоинт.
Промт:
Создай эндпоинт на FastAPI для {описание}. Используй Pydantic-модели для валидации, добавь обработку ошибок и документацию. Пример запроса и ответа.
Пример:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
items = {}
@app.post("/items/")
async def create_item(item: Item):
items[item.name] = item
return {"status": "created", "item": item}
@app.get("/items/{name}")
async def get_item(name: str):
if name not in items:
raise HTTPException(status_code=404, detail="Item not found")
return items[name]
10. Конвертация кода между версиями Python
Задача: обновить код с Python 2 на 3 или с 3.8 на 3.12.
Промт:
Перепиши этот код с Python {старая версия} на Python {новая версия}. Используй новые синтаксические возможности (f-строки, walrus operator, match-case). Поясни изменения.
Пример: замена % форматирования на f-строки, dict.has_key() на in.
11. Документирование кода
Задача: добавить docstring и комментарии.
Промт:
Добавь docstring в стиле Google и комментарии к этому коду. Опиши назначение каждой функции, аргументы, возвращаемое значение и возможные исключения.
12. Генерация регулярных выражений
Задача: создать regex для сложного шаблона.
Промт:
Напиши регулярное выражение на Python для поиска {описание}. Поясни каждый элемент. Приведи примеры совпадений и несовпадений.
Пример: поиск email-адресов:
import re
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
Как использовать эти промты эффективно
- Уточняйте контекст: чем больше деталей (версия Python, библиотеки, ограничения), тем точнее ответ.
- Итеративно: если результат не идеален, попросите улучшить или объяснить.
- Проверяйте код: AI может ошибаться, всегда тестируйте.
Эти 12 промтов покрывают основные ежедневные задачи Python-разработчика. Экспериментируйте, адаптируйте под свой стиль и делитесь своими находками.
Источники:
- Документация Python: https://docs.python.org/3/
- PEP 8: https://peps.python.org/pep-0008/
- FastAPI: https://fastapi.tiangolo.com/
- pandas: https://pandas.pydata.org/docs/
- asyncio: https://docs.python.org/3/library/asyncio.html
Комментарии