Соглашения по разработке на Python/Django

Fri 29 June 2012

Во время разработки я часто сверяюсь с известными мне соглашениями, стараюсь следовать рекомендациям. Цитировать их не имеет смысла -- лучше приведу ссылки.

PEP 8 -- Style Guide for Python Code.

Code Like a Pythonista: Idiomatic Python. В нем я нашел ответы на вопросы форматирования длинных строк:

expended_time = (self.finish_date() - self.start_date
                 + datetime.timedelta(days=1))

Google Python Style Guide.

Coding style из документации Django.

Django Best Practices от компании Lincoln Loop.

The Hitchhiker’s Guide to Python! от Kenneth Reitz.

The Hitchhiker’s Guide to Packaging от Tarek Ziadé.

Elements of Web Architecture от s7labs.

Твиты с ссылками на интересные статьи по Python от @czheng.

Рекомендации по именованию от Макконелла

Читать как мантру.

Именование переменных

Имя должно полно и точно описывать сущность. Формулирование сути переменной в словах.

Имя чаще всего описывает проблему реального мира, а не ее решение на языке программирования.

Значимая часть имени переменной располагаться в начале и читается первой. Спецификаторы вычисляемых значений находятся в конце:

revenue_total
expense_average

Не используйте "Number" из-за двойного смысла (количество и номер). Лучше:

customer_count
customer_index

Именование булевых переменных в утвердительной форме:

done
success или ok
found
error

Имена должны легко читаться.

Избегайте имен, имеющих:

  • похожие значения: file_number, file_index;
  • похожие звучания: wrap, rap;
  • похожие имена: плохо -- client_recs, client_reps, хорошо -- client_records, clients_reports;
  • цифры: file1, file2.

Не используйте "магические числа", заменяйте их абстрактными сущностями:

CYCLES_NEEDED = 5

Именование функций

Если функция возвращает значение, в имени должно быть указано описание возвращаемого значения.

Глагол get здесь излишен:

cos()

pen.current_color()
user.last_id()

Для именования процедуры используйте глагол + объект, над которым выполняется действие:

print_document()
repaginate_document()

document.print()
order_info.check()
monthly_revenue.calc()

Category: Python Tagged: python django best practices

comments