Инструменты и лучшие практики, которые я использую, когда пишу код на Python
Независимо от того, являетесь ли вы новичком в Python или опытным ветераном, концепция кода, который является «отраслевым стандартом», неуловима и часто утомительна для достижения — как говорится, это определенно возможно! В этом посте я подробно расскажу об инструментах и передовых практиках, которые использую при написании кода на Python — давайте сразу приступим!
Полный список и ссылки внизу!
Инструмент № 1: отладчик Python
Поставьте в очередь старую шутку об отладке кода с помощью операторов печати…
Всякий раз, когда я попадаю в затруднительное положение с одним из своих проектов и просто не могу избавиться от серии ошибок, модуль Python Debugger из стандартных библиотек Python — это мой инструмент — он предлагает интерактивный отладчик исходного кода, который могут быть встроены в сценарии, аналогичные операторам печати или регистрации.
Пример:
Инструмент можно использовать для тестирования новых функций перед добавлением их в скрипты именно в той среде, в которую они будут добавлены — довольно мощно, не так ли?
Ссылка: https://docs.python.org/3/library/pdb.html
Рекомендация № 1: Строки функций и строки документации
Больше информации из моего прошлого поста здесь!
Строка документации обычно определяется в определении функции или класса с использованием тройных двойных кавычек и разбивается на 3 четко определенных раздела:
- Описание функционала.
- Разбивка по любым параметрам.
- Разбивка возврата, если таковая имеется.
Целью любой строки документации является объяснение той части кода, на которую она ссылается, чтобы любой новый пользователь, просматривающий ее, мог понять, в общем смысле, что делает этот раздел.
См. следующий пример, но имейте в виду, что более поздняя практика, которую я представлю, немного изменит этот формат!
def filter_systems(data, threshold, keep_duplicate=False) """ A simple filter that removes systems that are beneath the user-defined x-value threshold. Parameters ---------- `data` : Pandas DataFrame A pandas dataframe containing the systems from the xyz dataset. Must include columns 'x' and 'y'. All timestamp columns must be timezone aware. `threshold` : float A float threshold for the x-value to be applied to the filter. Must be between 1 and 10. `keep_duplicates` : Boolean Defaults to False. A boolean value determining whether duplicate systems should be removed in the filter. Returns ------- `filtered_data` : Pandas DataFrame A pandas dataframe containing the filtered systems from the xyz dataset. Must include columns 'x' and 'y'. All timestamp columns must be timezone aware. """
Инструмент № 2: Блокнот++
Просто выслушайте меня…
Теперь у каждого будет своя любимая IDE или текстовый редактор, но я выбираю Notepad++… почему вы спрашиваете? Потому что это заставляет меня на самом деле помнить функции и их параметры при использовании пакетов, устанавливаемых pip, вместо того, чтобы полагаться на что-то вроде помощника по «автокоррекции» VS Code.
Конечно, этого можно достичь в большинстве, если не во всех текстовых редакторах и IDE, но это только мое личное предпочтение! У меня есть некоторые настройки, настроенные в моем Notepad ++, чтобы поддерживать мои стандарты кодирования, а именно:
- Вертикальная линия вниз по файлам ровно на 100 символов — это гарантирует, что мои строки кода не будут слишком длинными.
- Отображать окончания строк — это говорит само за себя, но очень помогает при форматировании файлов.
Ниже вы можете увидеть мой макет Notepad++:
Лучшая практика № 2: подсказки для ввода
Больше информации из моего прошлого поста здесь!
Подсказки типов — это одна из тех функций, которые не очень похожи на Python, однако они могут значительно повысить ценность вашего кода, особенно при создании общедоступных пакетов и библиотек!
Используя библиотеку typing, подсказки типов позволяют программистам добавлять аннотации типов к параметрам функций. Они особенно эффективны в сочетании с существенными функциональными строками, поскольку это гарантирует, что пользователь вашего кода сможет понять функции, даже если исходный код абстрагирован от них.
Помните эту функциональную строку ранее? Вернемся к нему и добавим подсказки типов:
def filter_systems(data : pd.Dataframe, threshold : float, keep_duplicate : bool = False) """ A simple filter that removes systems that are beneath the user-defined x-value threshold. Parameters ---------- `data` : Pandas DataFrame A pandas dataframe containing the systems from the xyz dataset. Must include columns 'x' and 'y'. All timestamp columns must be timezone aware. `threshold` : float A float threshold for the x-value to be applied to the filter. Must be between 1 and 10. `keep_duplicates` : Boolean Defaults to False. A boolean value determining whether duplicate systems should be removed in the filter. Returns ------- `filtered_data` : Pandas DataFrame A pandas dataframe containing the filtered systems from the xyz dataset. Must include columns 'x' and 'y'. All timestamp columns must be timezone aware. """
И виола, всего несколько дополнительных символов могут иметь большое значение для повышения уровня определений функций и кода в целом!
Инструмент № 3: Пилинт
Или человеческое воплощение Пилинта!
Когда дело доходит до повторного просмотра сценария, который я недавно написал, мой основной инструмент, который помогает мне придерживаться лучших практик, — это Pylint. Pylint — это статический анализатор кода и один из, если не самый мощный инструмент в моем арсенале, когда я пишу код на Python.
Pylint указывает на необходимый импорт, слишком длинные строки кода и плохие имена переменных. Чтобы вызвать Pylint для сценария, необходимо выполнить следующую команду:
pylint <path_to_script.py>
Вот пример того, что это может дать; это взято из старого проекта:
Что мне больше всего нравится в Pylint, так это оценка /10 в конце вывода — это почти геймифицирует процесс совершенствования кода и позволяет пользователям устанавливать стандарт своего кода в числовой шкале!
Лучшая практика № 3: Избавьтесь от этих операторов print()
И не только для целей отладки...
Мы говорили о том, чтобы не использовать операторы print() для отладки, но я считаю, что их вообще не следует использовать — вместо этого я предпочитаю использовать операторы логирования. Опять же, из стандартной библиотеки Python модуль ведения журнала предлагает более легкий и настраиваемый способ вывода на терминал.
Преимущества регистрации:
- Вы можете дифференцировать ведение журнала в зависимости от серьезности, т. е. ошибок, предупреждений и т. д.
- Если ваш код используется вместе с другими модулями Python, любые операторы печати не будут четко указывать, откуда они берутся.
Простой пример может выглядеть так:
>>> import logging >>> logging.warning('Watch out!') WARNING:root:Watch out!
Заключение
И вот у нас есть 3 инструмента и 3 передовых метода, которые я использую при написании своего стандартного кода на Python!
Есть много других вещей, которые можно использовать для повышения уровня вашего кода, но я считаю эти лучшими.
Как обычно спасибо за прочтение, берегите себя
~ Итан
Использованная литература:
- Отладчик Python
- Пост в блоге о функциональных строках
- Блокнот++ скачать
- Введите подсказки к сообщению LinkedIn
- Пылинта
- Логирование vs печать
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.