Пробелы в выражениях и инструкциях

Избегайте использования пробелов в следующих ситуациях:

· Непосредственно внутри круглых, квадратных или фигурных скобок.

Правильно:

spam(ham[1], {eggs: 2})

Неправильно:

spam( ham[ 1 ], { eggs: 2 } )

· Непосредственно перед запятой, точки с запятой или двоеточием:

Правильно:

if x == 4: print(x, y); x, y = y, x

Неправильно:

if x == 4 : print(x , y) ; x , y = y , x

· Сразу перед открывающей скобкой, после которой начинается список аргументов при вызове функции:

Правильно:

spam(1)

Неправильно:

spam (1)

· Сразу перед открывающей скобкой, после которой следует индекс или срез:

Правильно:

dict['key'] = list[index]

Неправильно:

dict ['key'] = list [index]

· Использование более одного пробела вокруг оператора присваивания (или любого другого) для того, чтобы выровнять его с другим:

Правильно:

x = 1y = 2long_variable = 3

Неправильно:

x = 1y = 2long_variable = 3

Другие рекомендации

· Всегда окружайте эти бинарные операторы одним пробелом с каждой стороны: присваивания (=, +=, -= и другие), сравнения (==, <, >, !=, <>, <=, >=, in, not in, is, is not), логические (and, or, not).

· Если используются операторы с разными приоритетами, попробуйте добавить пробелы вокруг операторов с самым низким приоритетом. Используйте свои собственные суждения, однако, никогда не используйте более одного пробела, и всегда используйте одинаковое количество пробелов по обе стороны бинарного оператора.

Правильно:

i = i + 1submitted += 1x = x*2 - 1hypot2 = x*x + y*yc = (a+b) * (a-b)

Неправильно:

i=i+1submitted +=1x = x * 2 - 1hypot2 = x * x + y * yc = (a + b) * (a - b)

· Не используйте пробелы вокруг знака =, если он используется для обозначения именованного аргумента или значения параметров по умолчанию.

Правильно:

def complex(real, imag=0.0): return magic(r=real, i=imag)

Неправильно:

def complex(real, imag = 0.0): return magic(r = real, i = imag)

· Не используйте составные инструкции (несколько команд в одной строке).

Правильно:

if foo == 'blah': do_blah_thing()do_one()do_two()do_three()

Неправильно:

if foo == 'blah': do_blah_thing()do_one(); do_two(); do_three()

· Иногда можно писать тело циклов while, for или ветку if в той же строке, если команда короткая, но если команд несколько, никогда так не пишите. А также избегайте длинных строк!

Точно неправильно:



if foo == 'blah': do_blah_thing()for x in lst: total += xwhile t < 10: t = delay()

Вероятно, неправильно:

if foo == 'blah': do_blah_thing()else: do_non_blah_thing() try: something()finally: cleanup() do_one(); do_two(); do_three(long, argument, list, like, this) if foo == 'blah': one(); two(); three()

Комментарии

Комментарии, противоречащие коду, хуже, чем отсутствие комментариев. Всегда исправляйте комментарии, если меняете код!

Комментарии должны являться законченными предложениями. Если комментарий — фраза или предложение, первое слово должно быть написано с большой буквы, если только это не имя переменной, которая начинается с маленькой буквы (никогда не изменяйте регистр переменной!).

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

Ставьте два пробела после точки в конце предложения.

Программисты, которые не говорят на английском языке, пожалуйста, пишите комментарии на английском, если только вы не уверены на 120%, что ваш код никогда не будут читать люди, не знающие вашего родного языка.

Блоки комментариев

Блок комментариев обычно объясняет код (весь, или только некоторую часть), идущий после блока, и должен иметь тот же отступ, что и сам код. Каждая строчка такого блока должна начинаться с символа # и одного пробела после него (если только сам текст комментария не имеет отступа).

Абзацы внутри блока комментариев разделяются строкой, состоящей из одного символа #.

"Встрочные" комментарии

Старайтесь реже использовать подобные комментарии.

Такой комментарий находится в той же строке, что и инструкция. "Встрочные" комментарии должны отделяться по крайней мере двумя пробелами от инструкции. Они должны начинаться с символа # и одного пробела.

Комментарии в строке с кодом не нужны и только отвлекают от чтения, если они объясняют очевидное. Не пишите вот так:

x = x + 1 # Increment x

Впрочем, такие комментарии иногда полезны:

x = x + 1 # Компенсация границы

Строки документации

· Пишите документацию для всех публичных модулей, функций, классов, методов. Строки документации необязательны для приватных методов, но лучше написать, что делает метод. Комментарий нужно писать после строки с def.

· PEP 257 объясняет, как правильно и хорошо документировать. Заметьте, очень важно, чтобы закрывающие кавычки стояли на отдельной строке. А еще лучше, если перед ними будет ещё и пустая строка, например:

· """Return a foobang· · Optional plotz says to frobnicate the bizbaz first.· · """

· Для однострочной документации можно оставить закрывающие кавычки на той же строке.

Контроль версий

Если вам нужно использовать Subversion, CVS или RCS в ваших исходных кодах, делайте вот так:

__version__ = "$Revision: 1a40d4eaa00b $"# $Source$

Вставляйте эти строки после документации модуля перед любым другим кодом и отделяйте их пустыми строками по одной до и после.

Наши рекомендации