Язык программирования как и любой другой язык, созданный человеком (английский, русский, китайский и т.д.) постоянно изменяется и развивается. И Python здесь не исключение. Каждому из них присущи определенные наборы правил, которые закреплены в грамматических справочниках и словарях. Именно они составляют основу обучения. То же самое происходит и в языках программирования. Так вот таким своеобразным грамматическим справочником для Python является PEP (Python Enhancement Proposal). Так уж получилось, что самым удачным и известным документом является его 8 модификация - PEP 8.
На сегодняшний день PEP 8 - это действующий свод правил по написанию кода на Python для всех программирующих на данном языке в какой точке мира они бы не жили.
Для чего надо было создавать PEP 8
(читаемость имеет значение)
Как сказал создатель языка Python, Гвидо Ван Россум: «Код читается гораздо чаще, чем пишется». Это означает, что код должен быть понятен не только пишущему, но и читающему. Причем читающим можете оказаться и вы сами спустя какое-то время после окончания проекта, если по каким-то причинам вам снова нужно будет вернуться к данному коду. Код должен быть прост для понимания, не допускать разных толкований для любого, кто будет с ним взаимодействовать. В этом и заключается главный смысл создания PEP 8.
Правила использования имен
(явное лучше, чем неявное)
Первое с чего начинается программа, это создание имен для переменных, функций, классов и т.д. Так вот имена должны быть понятны, в их названиях должно заключаться их роль в программе, т.е. чт они делают и для чего используются. Не стоит использовать одиночные буквы, особенно О, I и l, т.к. по прошествии времени даже вы сами не сможете толком объяснить, что они обозначают. А данные три буквы также еще очень легко перепутать с цифрами.
- Функции. Используйте слово или слова в нижнем регистре. Для удобства чтения разделяйте слова подчеркиванием (function, my_function).
- Переменные. Используйте одну строчную букву, слово или слова. Для удобства чтения разделяйте слова подчеркиванием (x, var, my_variable).
- Классы. Каждое слово начинайте с заглавной буквы. Не разделяйте слова подчеркиванием (Model, MyClass).
- Методы. Используйте слово или слова в нижнем регистре. Для удобства чтения разделяйте слова подчеркиванием (class_method, method).
- Константы. Используйте одну заглавную букву, слово или слова. Для удобства чтения разделяйте слова подчеркиванием. (CONSTANT, MY_CONSTANT, MY_LONG_CONSTANT).
- Модули. Используйте короткие слова или слова в нижнем регистре. Для удобства чтения разделяйте слова подчеркиванием (module.py, my_module.py)
- Пакеты. Используйте короткие слова или слова в нижнем регистре. Не разделяйте слова подчеркиванием (package, mypackage).
Располагайте код правильно
(красивое лучше, чем уродливое)
Если написанный код состоит из единого монолитного полотна, он труден для восприятия. Особенно если код большой. С другой стороны, слишком разреженный код тоже не очень хорош. Он требует очень много места и в нем плохо визуально просматриваются связи между разными элементами кода.
Именно поэтому были созданы правила, как следует располагать код, чтоб он максимально был прост для восприятия и визуально выделял разные смысловые части.
Окружите функции и классы верхнего уровня двумя пустыми строками. Функции и классы верхнего уровня должны быть самодостаточны и обрабатывать отдельные функции. Имеет смысл разместить вокруг них дополнительное вертикальное пространство, чтобы было ясно, что они разделены.
class MyFirstClass:
pass
class MySecondClass:
pass
def top_level_function():
return None
Обособьте определения методов внутри классов одной пустой строкой. Внутри класса все функции связаны друг с другом. Рекомендуется оставлять между ними только одну строку:
class MyClass:
def first_method(self):
return None
def second_method(self):
return None
Используйте пустые строки внутри функций, чтобы показать этапы реализации кода. Иногда сложная функция должна выполнить несколько шагов перед оператором return. Чтобы помочь читателю лучше понять логику разработчика внутри функции, может быть полезно оставлять пустую строку между каждым шагом.
PEP8 предлагает сделать максимальную длину строки в 79 символов. Это требование связано с тем, чтобы можно было открывать рядом два окна, а также избегать переноса строк. Если же переноса строки избежать все-таки не удалось, то Python предполагает наличие продолжения строки, если код заключен в круглые, квадратные или фигурные скобки:
def function(arg_one, arg_two,
arg_three, arg_four):
return arg_one
Отступы
(должен быть один очевидный способ, как сделать это)
Существует два правила по отступам в Python:
- Используйте четыре последовательных пробела для отступа;
- Отдавайте предпочтение пробелам, а не табуляции.
Каждый отступ отделяет уровни вложенности кода.
Комментарии
(Если реализацию трудно объяснить, это была плохая идея)
Обязательно используйте комментарии для документирования кода в том виде, в каком он написан. Это поможет вам и тем, кто будет работать с вашим кодом разобраться в нем в будущем.
- Старайтесь используйте длину комментариев не более 72 символов;
- Не пользуйтесь сокращениями, начинайте каждое предложение с заглавной буквы;
- Не забывайте изменять комментарии, при изменении кода.
Использование пробелов в коде
(Разреженное лучше, чем плотное)
Необходимость пробелов в выражениях и операторах для лучшего восприятия кода невозможно переоценить. Если пробелов слишком мало, то код будет трудным для восприятия. Если пробелов, наоборот, слишком много, то может оказаться сложно визуально объединить отдельные фрагменты кода в логически связанные по смыслу блоки.
Окружите следующие бинарные операторы одним пробелом с каждой стороны:
- Операторы присвоения (=, +=, -= и т. п.)
- Сравнения (==, ! =, >, <. ≥, ≤) и (is, is not, in, not in)
- Логические (and, or, not)
Конечно, это далеко не полный перечень всех требований PEP 8, а только его небольшая часть. Понятно, что человеку, который только начинает постигать все тонкости программирования на Python на первых порах будет непросто привыкнуть к этим требованиям, но лучше сразу учиться писать правильно, потому что переучиваться всегда еще сложнее.