Типичные улучшения

Для поиска по тегу начните название тега с символа '@'.

Улучшения, показаны 50 из 121.

Используйте textwrap.dedent

Чтобы multiline строки не ломали отступы в коде функций и других блоков используйте функцию `dedent` …

Структурируйте работу с логером

Cуществует стандартная схема кода: 1. Создается логер в шапке файла 2. Сообщения отправляют функций внутри …

Сделайте logger глобальной переменной

Обычно логер нужен сразу внутри многих функций, и, чтобы не вызывать `getLogger` много раз внутри …

Включите подсветку синтаксиса в блоках кода Markdown

Подсветка синтаксиса заметно облегчает чтение кода. Сразу становится видно где вызвана функция, где начинается цикл …

Избавьтесь от asyncio.gather, wait и create_task

Стандартные `gather` и `wait` настолько опасны в использовании, что лучше сразу от них избавиться. Они …

Используйте super

В третьей версии Python есть стандартный способ достучаться до методов предка из класса с наследованием. …

Посчитайте количество записей на стороне БД

В Django количество записей внутри `QuerySet` можно посчитать с помощью самой обычной функции `len(…)`. Выглядит …

Используйте format_html для подстановки в HTML

Функция `format_html` в Django похожа по своим возможностям на обычное форматирование строк. Она тоже подставляет …

Отделите API Moltin от остального кода

Сейчас у вас есть файл с реализацией разных запросов к API Moltin. Этот модуль ценен …

Уточните название файла

Названия файлов важны. Хорошее название подсказывает программисту, что лежит в файле и куда писать новый …

Раскройте продуктовую ценность программы

В описании работы программы крайне нежелательно оперировать терминами "переменная", "функция", "цикл" и так далее. Ещё …

Замените термины с программистских на продуктовые

Во время написания документации стоит избегать терминов из прогаммирования, чтобы текст читался как можно проще. …

Избавьтесь от самописных примесей (mixins)

Mixins – это худшее, что может случиться с вашим кодом. Они подрывают стабильность кода, усложняют …

Избавьтесь от обёртки над requests

Используйте стандартный `response = requests.get(...)`! Да, функция прячет в себя 2 строчки кода, теперь вместо …

Не путайте адрес и путь

Адрес и путь похожи, но это не синонимы. **Путь** -- это локально, в файловой системе. …

Очистите код от индексов

Обращение к данным по индексу `voice_record[1][0]` сильно осложняет код. Программисту приходится держать в голове структуру …

Обновите комментарии в коде

Комментарии в коде - тоже часть кода. За ними нужно следить, их нужно поддерживать в …

Избавьтесь от комментариев, дублирующих код

Лишние комментарии нагромождают код, в нем сложнее ориентироваться. К тому же, они усложняют поддержку кода …

Используйте enumerate для нумерации списков

Для нумерации списков в Python есть встроенная функция enumerate. Она избавляет от рутины в работе …

Сделайте скрипт совместимым с *nix и Windows

В Linux и MacOs для записи путей в файлам используют символ `/`, а в Windows …

Используйте splitext из модуля os.path

Функция `os.path.splitext` возвращает расширение и путь до файла. Она уже есть в стандартной библиотеке, не …

Отложите перехват исключения

В работе с исключениями всегда следуйте правилу **«Бросай рано, обрабатывай поздно»**. Порой это контринтуитивно — …

Избавьтесь от типов в названиях

Вся приятность системы типов в Питоне заключается в том, что мы не указываем типы. Благодаря …

Избавьтесь от звёздочных импортов

Любой `import *` создаёт массу проблем: - превращают в квест поиск импортированных функций - на …

Разбейте сложные выражения на части

Сложно понять что происходит в коде, когда в одной строке выполняется сразу много операций: вызовов …

Проверьте HTTP статус ответа

Интернет так устроен, что даже если сайт не может обработать запрос, он всё равно обязан …

Сделайте импорт модуля безопасным

Если в момент подключения модуля тот ломается, то весь его код остается недоступным. Ситуацию спасут …

Исправьте ошибку при быстром движении корабля

Если скорость корабля будет высокой и за один такт он преодолеет больше одной клетки, то …

Развяжите координатные оси

При считывании нажатий клавиш могут оказаться зажатыми сразу две - влево и вниз. Такое случается, …

Структурируйте скрипт

Общая структура программы такова: 1. Импорты 2. Глобальные константы 3. Объявления функций 4. Объявление `def …

Поправьте множественное число в названиях

Программист ориентируется в коде по названиям переменных. Если сначала вам встретится переменная `apples`, а в …

Откажитесь от input

Пользоваться программой и тестировать её станет проще, если заменить функцию `input` на стандартную библиотеку `argparse`.

Удалите неиспользуемый код

За неиспользуемым кодом никто не будет следить, ведь он никому не нужен. А раз так, …

Высушите названия

Никто не хочет читать водянистый текст, в котором смысл прячется за пятиэтажными оборотами и десятками …

Добавьте в парсер поддержку всех относительных адресов

Сайты в интернете — это вещь динамичная, их код постоянно обновляется, даже если внешне это …

Изолируйте миграцию от остального кода

В миграциях Django ни в коем случае нельзя использовать код из models.py и прочих файлов …

Проверьте ответ tululu на редирект

Сайт tululu ведёт себя нестандартно — в любой непонятной ситуации он вместо 404 присылает редирект …

Вынесите вставки кода в отдельные блоки

В Markdown есть два формата для вставок кода. Первый — это inlines. Его применяют для …

Отделите STATIC_ROOT от STATICFILES_DIRS

Пока мы занимаемся отладкой django берёт на себя функции веб-сервера и веб-приложения. Обычно эти роли …

Почините Add another для картинок

![](https://dvmn.org/filer/canonical/1600270419/713/) [Ссылка на скриншот](https://dvmn.org/filer/canonical/1600270419/713/) Там, где загружена картинка, слева показано название загруженного файла, а справа …

Обновляйте токен по графику

Общение с Moltin — самая дорогая операция в вашем боте. Сам по себе питон работает …

Уточните название класса в HTML

Название классов так же важны, как и названия переменных, функций. Именно классы связывают html-теги со …

Используйте livereload cli

Библиотека livereload предоставляет два интерфейса. Есть обычная библиотека, её можно импортировать и вызвать одну из …

Проверьте адрес перед редиректом

С параметром `next` есть известная уязвимость: если не проверять куда вы делаете редирект, то ваш …

Используйте contextlib.suppress

Если программист хочет проигнорировать какое-нибудь исключение, то часто получается подобный код: ```python try: os.remove('somefile.tmp') except …

Соберите переменные окружения в settings.py

Когда другой программист захочет развернуть проект, то первым делом он пойдёт искать переменные окружения в …

Отключите кэш в дата-миграции

Вообще, в питоне не принято сильно заботиться о памяти. Но это до тех пор, пока …

Используйте split из модуля os.path

Функция `os.path.split` возвращает имя файла и путь до него. Она уже есть в стандартной библиотеке, …

Исправьте имена персонажей в анкетах

Игроки Метро&Монстры захотят создавать анкеты с персонажами разного пола. Методы `first_name` и `last_name` из библиотеки …

Высушите super()

Вы использовали старую форму записи функции `super()`, так её оформляли ещё во втором питоне. Сейчас …