Инструменты и лучшие практики, которые я использую, когда пишу код на 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!

Есть много других вещей, которые можно использовать для повышения уровня вашего кода, но я считаю эти лучшими.

Как обычно спасибо за прочтение, берегите себя

~ Итан

Использованная литература:



Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.