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

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

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

Введите дополнительную переменную

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

Избавьтесь от лишних классов

Использование классов в коде усложняет программу. Создатели библиотек знают об этом, поэтому пишут подробную документацию …

Удалите отладочные print

Эти вызовы `print` уже выполнили свою задачу, помогли отладить код. Теперь от них больше вреда …

Сделайте строку многострочной

Если по строке разбросаны символы переноса строки `\n`, то сложно понять как будет выглядеть результат. …

Удалите отладочные Image.save()

По коду разбросаны вызовы `.save()` для промежуточных результатов. Это удобно при отладке, но загромождает вывод …

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

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

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

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

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

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

Отформатируйте код

Форматирование кода далеко от общепринятого, и другим программистам будет сложно в нём разобраться.

Откажитесь от лишних refresh

Библиотека curses кеширует все изменения на экране, вычисляет diff, оптимизирует его по размеру и только …

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

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

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

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

Избавьтесь от дубликатов функций

Дублирование кода приводит к быстрому росту его объема. А чем больше кода, тем сложнее его …

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

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

Упростите цикл while

Следующих два фрагмента кода эквивалентны: ```python while True: ... if not condition: break ``` Можно …

Разбейте коммит на несколько атомарных

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

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

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

Оптимизируйте декодирование JSON

Превращение JSON строки в структуру данных Python требует много процессорного времени. Этот ресурс не безграничен, …

Очистите Docker образ от данных apt

Команда `apt update` скачивает из сети каталог пакетов дистрибутива и, если вовремя его не удалить, …

Ускорьте тестирование Docker образа

Чтобы протестировать докер-образ, приходится пересобирать его после каждого изменения скрипта. Это отнимает время, очень много …

Сократите валидаторы с использованием any

Теперь когда вы написали валидаторы с помощью цикла `for`, у вас не составит труда использовать …

Укажите все аргументы функции

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

Выберите между raise_for_status и ok

Метод `response.raise_for_status()` выкидывает исключение, если срабатывает условие `not response.ok`. По этой причине нет смысла повторно …

Упростите доступ к данным

Добраться до нужного фрагмента во вложенной структуре данных бывает не просто: ```python json_data['new_attempts'][0]['lesson_title'] ``` Таких …

Обработайте status timeout

API Девмана может вернуть в ответе JSON с полем `'status' == 'timeout'`.

Не пропускайте уведомлений

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

Ускорьте повторную сборку Docker образа

Исходники меняются намного чаще, чем зависимости apt-get и requirements.txt. Добавляя исходники в начале сборки образа, …

Остановите процесс zip в случае сбоя

Сейчас, если что-то пойдет не так, то в системе останется работать зависший процесс zip. > …

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

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

Не путайте JSON и полученные оттуда данные

JSON — это текстовый формат данных, в Python он представляется в виде строки. Результат декодирования …

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

Шаблоны намного нагляднее — сразу видно куда и какое значение будет подставлено, легко представить себе …

Перенесите canvas.nodelay в код инициализации

```python canvas.nodelay(True) ``` Этот код поменяет настройки canvas для всей программы разом и сломает остальной …

Используйте метод file.read()

Чтобы считать все содержимое текстового файла, можно воспользоваться методом `read`. Это быстрее и проще, чем …

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

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

Распределите константы по модулям

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

Начните название функции с глагола

Каждая функция — это действие, поэтому название должно содержать глагол. Еще лучше, если название начинается …

Соберите управление списком obstacles в одном месте

Код запутан и неустойчив из-за того, что препятствия регистрируются в одной функции, а удаляются — …

Зафиксируйте версии пакетов

Когда через полгода выйдут новые версии библиотек с приятными плюшками и обратно несовместимыми изменениями, установка …

Закройте сокет в случае ошибки

Даже в случае сбоя в работе программы, полезно вызывать `writer.close()` — закрытие сокета избавит от …

Распутайте класс-спагетти

Иногда код сравнивают со спагетти — вызов одного его метода влияет на работу других методов, …

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

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

Разбейте код по логическим блокам

Пустые строки используются для того, чтобы разбить код на логически связанные блоки. Это похоже на …

Создайте обратное давление

В библиотеке asyncio запись данных в сокет не приводит к их немедленной отправке. Сделав это, …

Не переизобретайте механизм исключений

Когда-то в программах не было исключений и их код был усыпан бесконечными проверками — удачно …

Воспользуйтесь logging.exception

Отправить в лог информацию об ошибке — это настолько частая задача, что для неё есть …

Уберите незаказанную фичу

Любая новая фича требует затрат на её создание, тестирование и поддержание. Когда фичи заказывает клиент, …

Уберите числа из названий

Когда какое-то значение не меняется, хочется записать его в имя. Например, если вам всегда надо …

Вынесите конфиг из кода

На то есть сразу несколько причин. Во-первых, пользователи не хотят лезть в код. А во-вторых, …