Немало уже сказано о том, что специалисты по анализу и обработке данных не пишут чистый код. И тому есть объяснение: большая часть всей предварительной работы (разведочный анализ данных, отбор признаков и первичная обработка) выполняется в Jupyter Notebook, где мы не заботимся о качестве кода.
Специалисты по анализу и обработке данных, имеющие опыт разработки программного обеспечения, гораздо лучше справляются с написанием кода: они знают, как реагировать на ошибки, разбираются в документации, модульности и так далее. Многие компании считают большим плюсом для кандидатов наличие опыта в разработке, потому что такие кандидаты, скорее всего, напишут код лучше.
Код, который пишут специалисты по анализу и обработке данных для запуска модели в массовое использование, по большей части не соответствует рекомендациям по написанию кода. Например, руководству по стилю PEP8. PEP расшифровывается как Python Enhancement Proposal (Предложения по развитию Python). PEP — документ, в котором описываются новые возможности Python и такие его аспекты, как дизайн и стиль. Каждая новая возможность предлагается, а затем рассматривается членами сообщества, которые вносят свой вклад в развитие Python (это разработчики Google, Microsoft и других гигантов сферы информационных технологий). Но зачем следовать каким-то руководствам?
Теперь обратимся к рекомендациям, изложенным в PEP8.
Стиль именования
- Переменные, функции, методы, пакеты, модули:
- Строчные буквы, слова разделены нижним подчёркиванием: например,
check_pass
2. Классы и исключения:
- Заглавная буква в начале, верхний регистр между словами вместо пробела:
CamelCase
, например,JustCounter
.
3. Защищённые методы и внутренние функции:
- Знак подчёркивания впереди:
_start_engine
4. Приватные методы:
- Два знака подчёркивания впереди:
__foo(self, ...)
.
5. Константы:
- Верхний регистр:
IP_SERVER='111.11.11.11'
6. Лучше использовать обратную нотацию:
elements = ...
active_elements = ...
defunct_elements ...
Отступ
Используем 4 пробела и никакой табуляции.
Импортирование
- Порядок импорта должен быть следующим:
1. Встроенные пакеты Python. 2. Пакеты сторонних разработчиков. 3. Локальные пакеты.
Длина строки
Стараемся разбивать строку длиннее 80 символов.
even_numbers = [var for var in range(100)
if var % 2 == 0]
Иногда дальше разбивать не получается, особенно в случае с цепочкой методов.
Пробел
- Обязательно ставим пробел между двоеточием и значением ключа в словаре:
names = {'gagan': 123}
2. Ставим пробел между операторами в случае арифметических операций и операций присваивания:
var = 25
math_operation_result = 25 * 5
3. Не ставим пробел между операторами при передаче в качестве параметра:
def count_even(num=20):
pass
4. Ставим пробел после запятой:
var1, var2 = get_values(num1, num2)
Документация
Следуем рекомендациям в PEP 257, чтобы научиться документировать программу на Python.
- Используем однострочную форму документирования для очевидных функций:
"""Return the pathname of ``foo``."""
2. Многострочная документация должна состоять из:
Строки с кратким описанием
Случая использования, если есть
Аргументов
Типа возвращаемого значения и семантики, если не возвращено None
Пример:
class Car:
"""A simple representation of a car.
:param brand: A string, car's brand.
:param model: A string, car's model.
"""
def __init__(self, brand, model):
self.brand = brand
self.model = model
class Car:
"""A simple representation of a car.
Заключение
Прежде всего при написании кода нужно позаботиться о том, чтобы код был простым и его легко было читать. Ни у кого не должно возникнуть проблем с пониманием кода.
Читайте также:
- Анализ независимых компонент в Python
- Руководство по использованию регулярных выражений Python
- Строковые методы в Python
Перевод статьи Gagandeep Singh: Best Python practices for Data Scientists