Документация по Python

Отступы

В: Документация по Python

Введение

Примеры

Ошибки отступов

Расстояние должно быть равномерным и равномерным. Неправильное отступа может вызвать IndentationError или вызвать программу , чтобы сделать что - то неожиданное. Следующий пример поднимает IndentationError :

 a = 7
if a > 5:
  print "foo"
else:
  print "bar"
 print "done"

 

Или , если строка после двоеточия не отступ, IndentationError также будет поднят:

 if True:
print "true"

 

Если добавить отступы , где она не принадлежит, IndentationError будут повышены:

 if  True:
    a = 6
        b = 5

 

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

 def isEven(a):
    if a%2 ==0:
        return True
        #this next line should be even with the if
        return False
print isEven(7) 

Простой пример

Для Python Гвидо ван Россум основал группировку утверждений на отступе. Причины этого объясняются в первом разделе «Дизайн и история Python FAQ».Колоны, : , используется , чтобы объявить отступ блок кода , например, в следующем примере:

 class ExampleClass:
    #Every function belonging to a class must be indented equally
    def __init__(self):
        name = "example"

    def someFunction(self, a):
        #Notice everything belonging to a function must be indented
        if a > 5:
            return True
        else:
            return False

#If a function is not indented to the same level it will not be considers as part of the parent class
def separateFunction(b):
    for i in b:
    #Loops are also indented and nested conditions start a new indentation
        if i == 1:
            return True
    return False

separateFunction([2,3,5,6,1])

 

Пробелы или табуляции?

Рекомендованный отступ состоит из 4 пробелов , но вкладки или пробелы могут быть использованы до тех пор , как они согласуются. Не следует смешивать вкладки и пробелы в Python , так как это вызовет ошибку в Python 3 и может приводит к ошибкам в Python 2 .

Как анализируется отступ

Пробелы обрабатываются лексическим анализатором перед анализом.

Лексический анализатор использует стек для хранения уровней отступов. В начале, стек содержит только значение 0, которое является самой левой позицией. Всякий раз, когда начинается вложенный блок, новый уровень отступа помещается в стек, и токен INDENT вставляется в поток токенов, который передается анализатору. Там никогда не может быть больше , чем один «INDENT» маркер в строке ( IndentationError ).

Когда строка встречается с меньшим уровнем отступа, значения выталкиваются из стека до тех пор, пока значение не окажется сверху, равным новому уровню отступа (если ничего не найдено, возникает синтаксическая ошибка). Для каждого извлеченного значения генерируется токен DEDENT. Очевидно, что может быть несколько жетонов "DEDENT" подряд.

Лексический анализатор пропускает пустые строки (те, которые содержат только пробелы и, возможно, комментарии) и никогда не будет генерировать для них токены «INDENT» или «DEDENT».

В конце исходного кода токены «DEDENT» генерируются для каждого уровня отступа, оставленного в стеке, до тех пор, пока не останется только 0.

Например:

 if foo:
    if bar:
        x = 42
else:
    print foo
 

анализируется как:

 <if> <foo> <:>                    [0]
<INDENT> <if> <bar> <:>           [0, 4]
<INDENT> <x> <=> <42>             [0, 4, 8]
<DEDENT> <DEDENT> <else> <:>      [0]
<INDENT> <print> <foo>            [0, 2]
<DEDENT> 

 

Синтаксический анализатор обрабатывает токены "INDENT" и "DEDENT" как разделители блоков.

Синтаксис

Параметры

Примечания

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.