Поскольку я действительно без ума от "стиля", я напишу рекомендации, которые я в настоящее время использую в проекте SLOC объемом около 8 тыс. С примерно 35 файлами, большинство из которых соответствует PEP8.
PEP8 говорит 79 (WTF?), Я иду с 80, и я уже привык к этому. Меньше движения глаз в конце концов!
Строки документов и прочее, занимающее несколько строк в '' '. Все остальное в ''
. Кроме того, мне не нравятся двойные кавычки, я все время использую только одинарные кавычки ... думаю, это потому, что я пришел из угла JavaScript, где его тоже проще использовать '', потому что таким образом вам не нужно избегать всех HTML материал: O
Во главе, встроенный перед пользовательским кодом приложения. Но я также придерживаюсь подхода «ранний сбой», поэтому, если есть что-то, что зависит от версии (например, GTK), я сначала импортирую это.
Зависит, в большинстве случаев, я использую import foo и импорт foo, но в некоторых случаях (например, имя уже определено другим импортом) я также использовал панель импорта foo как bla.
4 пробела. Период. Если вы действительно хотите использовать вкладки, убедитесь, что преобразовали их в пробелы перед фиксацией при работе с SCM. НО (НИКОГДА (!) СМЕШИВАТЬ ТАБЛИЦЫ И ПРОСТРАНСТВА !!! Это может и внесет ужасные ошибки.
some_method или foo_function, CONSTANT, MyClass.
Также вы можете спорить об отступах в тех случаях, когда вызов метода или что-то занимает несколько строк, и вы можете спорить о том, какой стиль продолжения строки вы будете использовать. Либо окружите все с помощью ()
, либо сделайте \
в конце строки. Я делаю последнее, и я также помещаю операторы и другие вещи в начале следующей строки.
# always insert a newline after a wrapped one
from bla import foo, test, goo, \
another_thing
def some_method_thats_too_long_for_80_columns(foo_argument, bar_argument, bla_argument,
baz_argument):
do_something(test, bla, baz)
value = 123 * foo + ten \
- bla
if test > 20 \
and x < 4:
test_something()
elif foo > 7 \
and bla == 2 \
or me == blaaaaaa:
test_the_megamoth()
Также у меня есть некоторые рекомендации для операций сравнения, я всегда использую is(not)
для проверки None True False
, и я никогда не выполняю неявное логическое сравнение, такое как if foo:
, я всегда делаю if foo is True:
, динамическая типизация хороша, но в В некоторых случаях я просто хочу быть уверен, что эта вещь делает правильные вещи!
Еще одна вещь, которую я делаю - никогда не используйте пустые строки! Они находятся в файле констант, в остальном коде у меня есть такие вещи, как username == UNSET_USERNAME
или label = UNSET_LABEL
, это просто более наглядно!
У меня также есть некоторые строгие правила в отношении пробелов и другие сумасшедшие вещи, но мне это нравится (потому что я без ума от этого), я даже написал скрипт, который проверяет мой код:
http://github.com/BonsaiDen/Atarashii/blob/master/checkstyle
ВНИМАНИЕ (!): Это повредит вашим чувствам! Даже больше, чем делает JSLint ...
Но это только мои 2 цента.