Отступы

Введение

Примеры

  • 0

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

    Расстояние должно быть равномерным и равномерным. Неправильное отступа может вызвать 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) 
  • 1

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

    Для 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 .

  • 1

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

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

    Лексический анализатор использует стек для хранения уровней отступов. В начале, стек содержит только значение 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" как разделители блоков.

Синтаксис

Параметры

Примечания