Продвинутая логика именования в Python
Разобрали на примерах, как и почему лучше называть различные объекты в Python.
9К открытий13К показов
Если вы уже практикуете программирование на Python и испытываете проблемы с отложенным чтением (как и большинство кодеров), то ваш навык именования может стать зоной роста.
Комментировать код зачастую не хочется. Во-первых, на это уходит много времени и сил. Во-вторых, неизвестно, пригодятся ли это вообще. Ведь программа может оказаться временной, и ей перестанут пользоваться через пару дней. Или сеньор удалит половину строк — вместе с теми самыми комментариями.
В такой ситуации немалую пользу принесет навык именования объектов кода.
Как назвать переменную — вопрос сложный и болезненный. Его обсуждают авторы на Хабре, за плохие попытки осуждают на Stack Overflow. Ситуацию высмеивают в мемах. Если назвать переменную неправильно — или просто странно — люди, которым впоследствии придётся читать и рефакторить ваш код, запутаются. А после придут узнавать, что вы имели в виду под uber_magic_cat и где расширенные комментарии.
Чтобы таких ситуаций не было, и ни вы, ни команда не тратили своё время и ресурсы, предлагаю разобраться в теме и научиться правильно называть объекты.
Сперва вспомним базу: PEP 8
PEP (Python Enhancement Proposal) – руководство по улучшению кода, описывает рекомендации и стандарты, которые делают код более читаемым и понятным. Вот его основные принципы.
Отступы и пробелы
- Используйте четыре пробела для каждого уровня отступа. Не используйте табуляцию;
- Избегайте пробелов в конце строки;
- Добавляйте пустые строки между функциями и классами — и по обе стороны от операторов.
Максимальная длина строки
- Ограничивайте строки кода до 79 символов (это оптимальная длина для среднестатистического экрана);
- Если выражение длинное, делайте перенос как в примере ниже:
Импорты
- Группируйте импорты в следующем порядке: стандартные, сторонние библиотеки, самописные модули. Разделяйте группы пустыми строками;
- Импортируйте только необходимые компоненты.
Пробелы до и после операторов
- Используйте пробелы до, после операторов (= + — * / и проч.) и после запятых;
- Не добавляйте лишних пробелов: они могут ухудшить читаемость кода.
Имена переменных и функций
- Имена должны легко читаться, для разделения слов используйте нижние подчеркивания (например,
record_count
,calculate_total
); - Для констант используйте ЗАГЛАВНЫЕ_БУКВЫ_С_ПОДЧЕРКИВАНИЯМИ;
- Не начинайте название с цифры;
- Избегайте зарезервированных создателями ЯП слов (list, dict и так далее).
Комментарии
- Добавляйте пояснительные комментарии для сложных частей кода;
- Пишите комментарии с заглавной буквы, а текст отделяйте двумя пробелами от символа #.
Документация
- Используйте docstrings для документирования модулей, функций, классов и методов.
- Документируйте параметры функций, возвращаемые значения и возможные исключения.
Логические блоки
- Используйте один уровень отступа для каждого нового блока кода (циклы, условия, функции и так далее).
- Избегайте хардкод-чисел. Заменяйте числа в коде на именованные константы. Вместо:
Лучше так:
Зайдем немного глубже
Теперь хочу обратить ваше внимание на пятый пункт — «Имена переменных и функций». Вы когда-нибудь задумывались, какими частями речи именовать тот или иной объект? Классу лучше быть существительным, функции – сказуемым, это, кажется логичным. Но как быть с остальными объектами?
Давайте пройдемся по часто используемым типам объектов и посмотрим, как лучше поступить с их именованием.
В качестве примеров буду приводить части своего кода: я обеспечиваю полный жизненный цикл данных из разных ботов: выгрузка, обработка, подгрузка в хранилище и вёрстка обновляемых отчётов. Так что специфику других профессий глубоко не затрагиваю.
Переменные
Но переменных много, правил именования — тоже. И базовая программа не охватывает всё. Поэтому делюсь несколькими принципами, которые я использую в повседневной работе:
- Используйте аббревиатуры. Так в моём боте выглядит переменная, содержащая идентификатор пользователя Telegram:
- Оставляйте неизменными названия переменных, которые устоялись в документации. Порой проще дописать комментарий об объекте и найти подсказку в Stack Overflow, чем получить понятное название, содержимое которого спустя месяц не отладить:
- Опускайте гласные в существительных. В рунете этой практике только предстоит устояться. А зря. Даже частичное опущение подойдет:
Функции
В название функции часто добавляются сказуемое (глагол или причастие). Однако в моей практике для разграничения похожих функций удобнее приписывать еще и дополнение:
Столбцы таблиц и столбцов
С этим сталкиваюсь на практике практически каждый день. Вот основные принципы, которые я определила (думаю, во многом рекомендации у специалистов с опытом совпадут):
- По умолчанию именуйте столбцы по-английски. Большая часть библиотек сегодня поддерживает обращение через квадратные скобки (для случаев, когда в названии не латиница). Но если название станет аргументом, передаваемым через командную строку, то придётся запоминать, как именно передавать кириллицу:
- Если решили именовать столбец по-русски, старайтесь использовать небольшое название (до 20 символов): такое при многократном обращении к столбцу не потребуется долго набирать:
Файлы
Если речь идет о временном файле, который вы изучите сразу после исполнения и удалите, достаточно назвать его как объект:
Однако если речь идет о регулярном использовании, лучше «вложиться»:
- Гуглите и используйте аббревиатуры. К примеру, датафрейм о пациентах, прошедший Предварительную обработку данных (Exploratory Data Analysis) и выгруженный в файл, можно назвать ‘patients_eda.csv’.
- Пишите в README пояснения к скриптам. Документация репозитория выручит, если придумать хорошее название не удастся.
Заключение
Работа с именованием переменных постепенно становится проще. Уже сегодня можно спросить у ИИ-расширения для VSCode Codeium, что делает тот или иной объект — и отталкиваться от ответа. Но порой ответы бывают малополезными:
Так что пока приходится самим искать идеальные названия. Хотелось бы верить, ситуация в будущем изменится.
Встречали странные имена в коде? Поделитесь в комментариях.
9К открытий13К показов