Стиль

Форматирование

Используйте 4 пробела для отступов


In [ ]:
# Правильно
if 1 == 3:
    print(1)
    if 2 == 3:
        print(2)

In [ ]:
# Неверно
if 1 == 3:
   print(1)
   if 2 == 3:
          print(2)

Никогда не смешивайте пробелы и символы табуляции

Не делайте строки длиннее 79 символов

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


In [ ]:
# Правильно
var = (a * 10 +
       b / 15)

In [ ]:
# Неверно
var = a * 10 \
    + b / 15

Пишите import каждого модуля в отдельной строке


In [ ]:
# Правильно
import math
import sys

In [ ]:
# Неверно
import math, sys

Располагайте import'ы в самом начале файла


In [ ]:
# Правильно
import sys

N = 5

def f():
    pass

In [ ]:
# Неверно
N = 5

import sys

Не ставьте пробелов сразу после скобок


In [ ]:
# Правильно
spam(ham[1], {eggs: 2})

In [ ]:
# Неверно
spam( ham[ 1 ], { eggs: 2 } )

Не ставьте пробелов перед скобками

  • Перед открывающей круглой скобкой при вызове функции
  • Перед открывающей квадратной скобкой, обозначающей индексирование или срез

In [ ]:
# Правильно
spam(kind['key'], lst[1:3])

In [ ]:
# Неверно
spam (kind ['key'], lst [1:3])

Не ставьте пробелов перед запятой, точкой с запятой, двоеточием


In [ ]:
# Правильно
if x == 4:
    print(x, y); x, y = y, x

In [ ]:
# Неверно
if x == 4 :
    print(x , y) ; x , y = y , x

Окружайте бинарные операторы ровно одним пробелом с каждой стороны

Верно для операторов:

  • Присваивания (=, +=, -= и т.д.)
  • Сравнения (==, <, >, !=, <=, >=, in, not in, is, is not)
  • Логических (and, or, not)
  • Арифметических (+, -, *, /, // и т.д.)

In [ ]:
# Правильно
a == b
a and b
3 + 5 * 8

In [ ]:
# Неверно
a==b
a  and   b
3+5  *  8

Не пишите в одну строку

Не располагайте несколько инструкций в одной строке. Разнесите их по разным строкам.


In [ ]:
# Правильно
x = 3
func(10)

In [ ]:
# Неверно
x = 3; func(10)

Не располагайте блок из нескольких инструкций на той же строке сразу после двоеточия (после if, while и т.д.)


In [ ]:
# Правильно
if x == 3:
    print(x)

In [ ]:
# Неверно
if x == 3: print(x)

Комментарии

Комментарии, противоречащие коду, хуже, чем их отсутствие.

Располагайте однострочные комментарии после кода в той же строке и отделяйте их от кода не менее, чем двумя пробелами. Комментарии должны начинаться с # и одного пробела.


In [ ]:
# Правильно
a = 5  # правильно оформленный комментарий

In [ ]:
# Неверно
a = 5 #слишком близко и без пробела

Имена

Не используйте символы l, O, I как имена переменных. В некоторых шрифтах они очень похожи на цифры.

Переменные и функции

Имена переменных и функций должны содержать только маленькие буквы. Слова разделяются символами подчёркивания. Не используйте транслит для переменных, называйте их по-английски.


In [ ]:
# Правильно
name, name_from_several_words

In [ ]:
# Неверно
Name, anotheRANDOMname, NAME, imya

Константы

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


In [ ]:
# Правильно
NAME, NAME_FROM_SEVERAL_WORDS

In [ ]:
# Неверно
NAMEFROMSEVERALWORDS, name, Name

Сравнения

Проверка последовательности на пустоту

Для последовательностей (строк, списков, кортежей) используйте факт, что пустая последовательность эквивалентна False.


In [ ]:
# Правильно
if lst:
    print(lst[0])

In [ ]:
# Неверно
if lst != []:
    print(lst[0])

Сравнение с True и False?!

Не проверяйте переменные логического типа на True и False используя ==.


In [ ]:
# Правильно
b = True
if b:
    print("Yes")

In [ ]:
# Неверно
b = True
if b == True:
    print("No")

Сравнение с None

Сравнение с None должно осуществляться с помощью операторов is и is not, а не операторами сравнения.


In [ ]:
# Правильно
if a is None:
    pass

In [ ]:
# Неверно
if a == None:
    pass

Сравнение с частью строки

Используйте методы .startswith() и .endswith() вместо срезов для проверки начала и конца строк.


In [ ]:
# Правильно
s = 'Hello, world!'
if s.startswith('Hello'):
    print('Hi')

In [ ]:
# Неверно
s = 'Hello, world!'
if s[:5] == 'Hello':
    print('Hi')

Функции

Не ставьте пробелы вокруг знака = при передаче функции именованных аргументов.


In [ ]:
# Правильно
f(5, x=7)

In [ ]:
# Неверно
f(5, x = 7)

Разделяйте определения функций двумя пустыми строками. Тело функции от основной программы также отделяется двумя пустыми строками.


In [ ]:
# Правильно
def f1():
    pass


def f2():
    pass


pass

In [ ]:
# Неверно
def f1():
    pass

def f2():
    pass
pass

Разделяйте тело функции на логические части одной пустой строкой.

Исключения из правил

Перечисленные выше правила имеет смысл нарушать в тех случаях, когда следование им понижает читаемость кода даже для людей, привыкших к этим правилам. Трижды подумайте, прежде чем делать это.