В каких случаях я могу использовать отступы в Python? - PullRequest
3 голосов
/ 13 марта 2019

Я читал Справочник по языку Python .

Вкл. Страница лексического анализа

Перед прочтением первой строки файлав стек помещается один ноль;это никогда не оторвется снова.Числа, помещенные в стек, всегда будут строго увеличиваться снизу вверх.В начале каждой логической строки уровень отступа строки сравнивается с вершиной стека.Если оно равно, ничего не происходит.Если он больше, он помещается в стек и генерируется один токен INDENT.

Здесь говорится, что добавление отступа в строку просто добавит значение, связанное с INDENT, к отслеживанию отступа.stack.


Поэтому я попытался сделать Python-эквивалент фрагмента C ++

int x = 23;
{
    int y = 13;
}
int z = 2*x;

с помощью этого фрагмента Python

x = 23
    y = 13
z = 2*x

Но заставить Python запускать этот кодгенерируется следующая ошибка:

    y = 13
IndentationError: unexpected indent

Таким образом, указанное выше правило не применяется все время, я хотел бы знать

  • Есть ли Python, эквивалентный приведенному выше C ++фрагмент кода
  • Какие именно случаи в Python, когда я могу использовать отступ, кроме общих случаев, таких как определения функций и классов.

Ответы [ 2 ]

1 голос
/ 13 марта 2019

"В начале каждой логической строки уровень отступа строки сравнивается с вершиной стека. Если он равен, ничего не происходит. Если он больше, он помещается в стек, и один токен INDENT равен генерируется ".

Так что здесь все рассказывается о том, когда генерируется маркер отступа. Теперь вам также нужно знать, что только ключевые слова class, def, if, for, while и т. Д. Позволяют иметь дополнительный токен отступа.

«когда я могу использовать отступ, кроме общих случаев, таких как определения функций и классов». -> Никогда.

Примечание: разрыв строки не считается токеном отступа. Итак:

>>> a = [1, 2, \  # \ is breaking line.
        3]

возможно, технически это не считается отступом, потому что это та же строка Python. То же самое для аргументов функции:

>>> a = np.array([0,1],
                 dtype=float)
0 голосов
/ 13 марта 2019

Я думаю, что самое важное использование отступов в циклах.Поскольку python не имеет end для циклов, как в Matlab, строки с правильным отступом находятся в цикле.

...