Постановка задач на Python
что указывать обязательно именно здесь
Что это
Четыре части запроса из статьи 3.2 работают везде. В этой статье — то, что нужно добавлять именно для Python, потому что без этого ИИ подставит своё.
Список короткий. Пять пунктов, и все пять — одна-две строки в запросе.
Как сказать ИИ
1. Версия Python
Не только библиотек (статья 2.11), но и самого языка. Между версиями меняется синтаксис:
| Что | С какой версии |
|---|---|
str | None вместо Optional[str] | 3.10 |
list[str] вместо List[str] | 3.9 |
match | 3.10 |
tomllib в стандартной библиотеке | 3.11 |
Группы исключений, except* | 3.11 |
Код с str | None на Python 3.9 падает с TypeError при импорте. Узнать свою
версию:
python3 --version2. Синхронно или асинхронно
Решается один раз и меняется потом дорого: синхронную функцию нельзя вызвать из асинхронной без обёртки, и наоборот.
Проект асинхронный: aiogram 3, aiosqlite. Все функции,
которые ходят в сеть или базу, — async.3. Что уже есть в проекте
Самый выгодный пункт из всех (статья 3.1, причина 2):
Подключение к базе — через get_conn() из db.py.
Логирование — через log = logging.getLogger(__name__).
Свои варианты не изобретай.4. Сигнатура
Для Python она работает особенно хорошо, потому что сразу задаёт и типы, и поведение при отсутствии данных:
def find_city(name: str) -> str | NoneОдна строка говорит: принимает строку, может не найти, и вызывающий обязан это проверить. Словами на то же ушёл бы абзац (статья 6.3).
5. Границы по стилю
Пиши просто: обычные циклы вместо вложенных включений,
без walrus-оператора. Типы обязательно, mypy --strict
должен проходить.Готовый шаблон
Контекст: Python 3.12, aiogram 3.13, aiosqlite.
Проект асинхронный. Подключение к базе — get_conn() из db.py,
логирование — logging.getLogger(__name__).
Задача: функция в storage.py
async def find_subs(user_id: int) -> list[str]
Возвращает список городов, на которые подписан пользователь.
Если подписок нет — пустой список, не None.
Границы: только эта функция, остальное не трогай.
Новых зависимостей не добавляй.
Готово, когда: mypy --strict проходит, и на пользователе
без подписок возвращается [].На что смотреть
Версия Python не названа. Самая дешёвая строка в запросе и одна из самых полезных.
Смешение синхронного и асинхронного. ИИ может выдать синхронную функцию в асинхронный проект — она заблокирует цикл (статья 6.4).
Своё подключение к базе. Признак того, что пункт 3 пропущен: в функции
появился свой sqlite3.connect вместо get_conn().
Сигнатура без | None. Если функция может не найти результат, это обязано
быть в типе. Иначе проверку забудут — и ты, и ИИ.
Шпаргалка
Пять пунктов: версия Python · sync или async · что уже есть · сигнатура · границы по стилю.
Версия языка важна не меньше версии библиотек.
Сигнатура с
| Noneзаменяет абзац объяснений.«Подключение через get_conn(), свои варианты не изобретай».
«Готово, когда mypy --strict проходит» — проверяемый критерий.
Постоянные пункты вынеси в файл контекста проекта.