Форматирование Python-кода
Python, точнее его самый известный представитель CPython, не очень предназначен для каких-либо быстрых расчетов. Иначе говоря, производительность у него не такая уж хорошая. А вот скорость разработки и читаемости отличная.
О читаемости и пойдет речь, а точнее как ее увеличить.
Проблемы форматирования
Идеального форматирования кода не существует. Для каждого языка стоит подстраиваться под общепринятые правила оформления кода. Да что говорить, если среди новичков С++ еще до сих пор войны по поводу ставить скобки на следующей строке или нет.
Для python’а основными проблемами форматирования является «C стиль». Не редко в рассматриваемый язык приходят из С-подобных языков, а для них свойственно писать с символами «)(;».
Символы не единственная проблема, есть еще и проблема избыточности написания конструкций. Питон, в отличие от Java, менее многословен и чтобы к этому привыкнуть у новичков уходит большое количество времени.
Это две основные проблемы, которые встречаются чаще всего.
Стандарты и рекомендации к оформлению
Если для повышения скорости исполнения кода можно использовать разные подходы, хотя эти подходы очень индивидуальны, то для форматирования текста существует прям slyle guide — это pep8. Далее его буду называть «стандарт».
Почитать про стандарт можно здесь, на русском языке можно здесь
Pep8 весьма обширный и позволяет программисту писать РЕАЛЬНО читаемый код.
- максимальную длину строк кода и документации
- кодировки файлов с исходным кодом
- рекомендации как правильно оформлять комментарии
- соглашения именования функций/классов, аргументов
- и многое другое
Автоматизируем форматирование
Если посмотреть сколько всяких правил в pep8, то можно сесть за рефакторинг надолго. Вот только это лениво, да и при написании нового кода сиравно будут какие-то ошибки правил. Для этого рассмотрим как же себе можно упростить жизнь.
pep8
Дабы иметь представление сколько ошибок оформления в коде, стоит использовать утилиту pep8.
У нее достаточный список параметров, который позволяет рекурсивно просмотреть все файлы в папках на предмет соответствия стандарту pep8.
Вывод утилиты примерно такой:
$ pep8 --first optparse.py optparse.py:69:11: E401 multiple imports on one line optparse.py:77:1: E302 expected 2 blank lines, found 1 optparse.py:88:5: E301 expected 1 blank line, found 0 optparse.py:222:34: W602 deprecated form of raising exception optparse.py:347:31: E211 whitespace before '(' optparse.py:357:17: E201 whitespace after '
По нему можно однозначно понять: где ошибка и что случилось.
autopep8
Ошибки стандарта часто повторяются от файла в файлу. И возникает сильное желание исправление автоматизировать. В этом случае на арену выходит autopep8.
Как и pep8, он умеет самостоятельно определять ошибки, а также исправлять их. Список исправляемых ошибок форматирования можно найти здесь
Само использование autopep8 крайне простое и может выглядеть так:
$ autopep8 ./ --recursive --in-place -a
После выполнения данной команды, утилита рекурсивно пойдет по подпапкам и начнет в самих же файлах исправлять ошибки.
autoflake
Можно пойти дальше и в качестве оружия взять autoflake. Эта утилита помогает удалить не используемые импорты и переменные.
Используется примерно так:
$ autoflake --in-place --remove-all-unused-imports --remove-unused-variables -r ./
Тем самым будут рекурсивно почищены файлы в директории.
unify
Крайний, заключительный момент в редактировании кода — это строки. Кто-то любит их писать в одиночных апострофах, кто-то в двойных. Вот только и для этого существует рекомендации, а также и утилита, которая позволяет автоматически приводить в соответствие — unify
Использование:
$ unify --in-place -r ./src/
Как и везде, утилита выполнит свое грязное дело рекурсивно для файлов в папке.
docformatter
Все время говорим о самом коде, а о комментариях еще ни разу не шло речи. Настало время — docformatter. Эта утилита помогает привести ваши docstring по соглашению PEP 257. Соглашение предписывает как следует оформлять документацию.
Использование утилиты ничуть не сложнее предыдущих:
$ docformatter --in-place example.py
А все вместе можно?
Выше описаны утилиты, их запуск можно добавить какой-нибудь bash скрипт под магическим названием clean.bash и запускать. А можно пойти и по другому пути и использовать wrapper над этими утилитами — pyformat
Выводы
Python-код легко читается, однако, есть способы сделать лапшу и из читаемого кода.
В данной статье были озвучены некоторые проблемы оформления кода, а также способы поиска этих проблем. Были рассмотрены несколько утилит, которые позволяют в автоматическом режиме убрать некоторые изъяны оформления кода.
Стоит озвучить вслух следующую рекомендацию при написании кода, которая универсальна для любого языка: более важным правилом оформлением, чем подобные pep8-документы — это постоянство стиля. Выбрали в каком стиле будете писать программу, в этом же и пишите весь код.
Если читателям будет интересно, то в следующей статье я опишу как в автоматическом режиме искать ошибки в коде.
- python
- оформление кода
- идеальный код
- форматирование кода
- Python
- Программирование
Autopep8 – спасательный круг для «зеленых» питонистов

Недавно я готовил доклад на тему “ Autopep8” и подчерпнул для себя много полезной информации. Немного подумав, решил поделиться ею с вами.
В среде разработчиков на Python все знают, что PEP8 является главным документом по стандарту кодирования на языке Python. Этот документ рассказывает о том, как правильно писать код на Python. Основная мысль следующая: код читается большое количество раз, в отличие от того, когда он пишется. Соответственно, правила о стиле написания кода нужны для того, чтобы улучшить качество читаемости кода и сделать этот код максимально понятным и согласованным между всеми разработчиками, которые с этим кодом работают. Поэтому, весь код необходимо писать в одном стиле, чтобы любой разработчик мог с ним работать без каких либо затруднений. Autopep8 — это инструмент, который анализирует код Python и, используя документ PEP8, определяет, что нужно исправить в вашем коде. Autopep8 автоматически исправляет большинство ошибок и неточностей в коде, обнаруженных посредством PEP8.
Исходя из технической документации, autopep8 исправляет следующие ошибки, о которых сообщает pycodestyle, например:
— серия ошибок E100 – исправление визуальных отступов.
— серия ошибок E200 – прибавление отсутствующих пробелов или удаление лишних.
— серия ошибок E300 – исправления, связанные с отсутствием или присутствием лишних пустых строк.
— серия ошибок E400 – исправления, связанные с импортом модулей.
— серия ошибок W290 – удаление лишних завершающих пробелов в последней строке и добавление пустой завершающей строки, в случае ее отсутствия.
Для установки Autopep8 необходимо в терминале выполнить команду:
$ pip install autopep8 После установки открываю Pycharm, создаю новый файл Python, называю его, к примеру, main.py. Далее необходимо добавить в файл, рандомный код, который представлен на картинке ниже:

Этот код выглядят небрежно, элементы словаря расписаны в несколько строчек, смещены отступы в строчках словаря, в некоторых местах элементы словаря склеились, проставлены лишние пробелы после словаря, скобка, закрывающая словарь опущена на строчку ниже. В объявлении функции summa склеились аргументы, а в самой функции склеились элементы возвращаемой суммы. Импорт модулей расположен в конце написанного кода, и в целом по коду присутствуют разрывы и склеивания в виде присутствия большого количества пробелов или их отсутствия. Теперь необходимо воспользоваться модулем Autopep8. В терминале, находясь в директории с файлом проекта, ввожу следующую команду:
$ autopep8 --in-place --aggressive main.py
Получаю код следующего вида:

Теперь код выглядит более лаконичным и красивым. Все склейки устранены, отступы соблюдены, импорты модулей перенесены в начало кода. Но все равно структура кода еще не идеальна – элементы словаря не упорядочены по одному в каждой строке, закрывающая скобка словаря находится, через строку, ниже. Применяю усиливающее свойство нашей команды. В терминале, при вводе команды, дублирую «—aggressive»:
$ autopep8 --in-place --aggressive --aggressive main.py
Получаю код следующего вида:

Теперь код выглядит практически идеально =)
Снова возвращаюсь к начальному неисправленному коду.

Чтобы включить только часть исправлений, нужно использовать параметр – select. Например, чтобы исправить различные типы проблем с отступами, ввожу команду:
$ autopep8 --select=E1 --in-place --aggressive main.py
Получаю следующий вид кода:

В итоге autopep8 исправил отступы внутри словаря.
Выполнить команду без написания ее в консоли немного проблематично, но в Pycharm это можно настроить, процесс настройки выглядит следующим образом:
1: File ---> Settings ---> Tools ---> External Tools
После открытия можно увидеть знак + в верхнем левом углу формы, щелкнув на него, можно добавить новый инструмент. Ввожу данные ниже в соответствующие окна:

После завершения вышеуказанной конфигурации нажимаю OK, чтобы сохранить. Теперь я имею быстрый доступ к инструменту autopep8, достаточно выполнить следующие действия:
Tools —> External Tools —> pep8. И просто щелкнуть мышью.

Теперь, что хочется сказать в заключении… Инструмент Autopep8 прост в установке, гибок в использовании и автоматически приводит ваш код к стандарту PEP8. А какие линтеры, автоформатеры знаете Вы? =) Делитесь в комментариях.
Команда autopep8: опции, ключи и примеры использования
Общие команды – Общие команды, присущие различным операционным системам.
autopep8
Format Python code according to the PEP 8 style guide. More information: https://github.com/hhatto/autopep8.
- Format a file to stdout, with a custom maximum line length:
- Format a file, displaying a diff of the changes:
- Format a file in-pace and save the changes:
- Recursively format all files in a directory in-place and save changes:
Примеры кода, демонстрирующие общие подходы в программировании или же решающие небольшие прикладные задачи. Языки программирования и библиотеки, позволяющие эффективно решать задачи разработки. Объектно-ориентированное программирование, функциональное программирование и прочие подходы и …

Трюки Bash
Полезные заметки по работе с командной строкой: bash и прочие *sh. Однострочники, скрипты, позволяющие решать большие и малые задачи администрирования и настройки Юникс систем. Zsh для современного MacOS, Bash для …

Заметки о настройке различных IT-штуковин. Настройка, допиливание, полировка. Конфигурируем приложения и тюнингуем сервера. Полезные параметры и ключи запуска программ. Увеличиваем скорость, уменьшаем отклик, ускоряем работу и улучшаем результаты работы. Объясняем …

Терминал/Консоль
Команды и инструкции терминала (консоли) Linux, MacOS, Windows и прочих операционных систем. Трюки и особенности командных оболочек, скрипты для администрирования Unix. Программирование и скриптование Windows и Linux, тонкая настройка Macos. …

Также может быть вам интересно:
- Как получить дерево директорий на Bash одним однострочником
- Python: Функции
- Python: Встроенные типы данных (list, set, dict, etc)
- Python: типы данных, переменные, логическое ветвление и циклы
- Как сделать свою middleware в Django (с примерами)
Свежее на «Цифре»
MessageId или как дебажить систему с минимумом проблем
Программы, 50 дней назад
Проверочный список для выпуска промышленных приложений с иллюстрациями
Работа и управление, 91 день назад
В Google Pixel и Windows Snipping Tool есть возможность восстановления обрезанных изображений
Новости, 23.03.2023
Два подарка "под ёлочку" от Heroes of Might and Magic
Новости, 25.12.2022
Вышел Pulsar – редактор кода на основе Atom
Новости, 25.12.2022
Ленивый backup PostgreSQL
Программы, 17.12.2022
Google анонсировала OSV-Scanner: сканер уязвимостей в программных проектах
Новости, 16.12.2022

Gitea запускает коммерческую версию, а недовольные – форк Forĝejo
На днях группа бывших разработчиков Gitea решили создать на базе хостинга кода Gitea свою версию проекта – "Forgejo". Причиной тому …

Пользователи и их создание в Django - своя регистрация на сайте
Если вашим сайтом должны активно пользоваться несколько человек, то полезно их различать, а значит - надо уметь создавать пользователей, либо …

Новый синтаксис старой команды with в Python 3.10
Как же долго моё чувство прекрасного страдало… Но в Python 3.10 появился новый парсер синтаксических конструкций Python!

Добавляем постраничную пагинацию на Django сайт
На сайтах часто встречаются многостраничные объекты: список товаров, список заметок и т.д. Поэтому важно уметь добавить навигацию по страницам на …

Новый оператор match-case в Python
В новой версии Python (3.10) появится новый оператор. Новый оператор сопоставления по шаблону (match-case).

Нет слов, одни. однострочники
На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)
В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если …

Пример своей консольной команды в Django проекте
Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать …

Разграничение прав доступа на Django сайте
Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система …
Autopep8 как пользоваться



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required