Почему Python игнорирует отступ комментария? - PullRequest
0 голосов
/ 22 марта 2020

Очевидно, это:

def f():
    pass
# maybe the function is over
    pass  # oh wait, it's not

f()

является допустимым синтаксисом, тогда как это не так:

def f():
    pass
''' maybe the function is over '''
    pass  # oh wait, it's not

f()

Это меня удивляет. Итак, мои вопросы:

  • Почему? Почему Python не считает первую версию синтаксической ошибкой?
  • Есть ли в PEP8 что-либо, рекомендующее не делать этого?

1 Ответ

5 голосов
/ 22 марта 2020

Да, первый действителен, потому что он начинается с #, который определен в языке как строка комментария, поэтому он игнорируется, и его отступ не завершает функции и не запускает новые.

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

для второго, пишущего что-то вроде

'''comment''''

, - столько же кода для интерпретатора, сколько этот

my_var = '''comment'''

Но это

# comment

игнорируется и не является кодом для интерпретатора.

...