Подтвердить что ты не робот

Отступ Python в "пустых строках"

Что предпочтительнее ( "." указывает пробел)?

А)

def foo():
    x = 1
    y = 2
....
    if True:
        bar()

В)

def foo():
    x = 1
    y = 2

    if True:
        bar()

Моя интуиция была бы B (это также то, что делает vim для меня), но я вижу людей, использующих A) все время. Это просто потому, что большинство редакторов там сломаны?

4b9b3361

Ответ 1

PEP 8, по-видимому, неясен в этом вопросе, хотя утверждения о "пустых строках" можно интерпретировать в пользу B. PEP 8 style-checker (pep8.py) предпочитает B и предупреждает, если вы используете A; однако оба варианта являются законными. Мое собственное мнение состоит в том, что, поскольку Python будет успешно интерпретировать код в любом случае, это не имеет особого значения, и попытка обеспечить его выполнение будет очень большой работой для очень небольшого выигрыша. Я полагаю, что если вы решительно настроены в пользу того или другого, вы можете автоматически конвертировать одно в другое. Попытка исправить все такие строки вручную, однако, была бы огромной задачей и действительно не стоила усилий, ИМХО.

Ответ 2

Если вы используете A, вы можете скопировать свой блок в оболочку python, B получит неожиданную ошибку отступа.

Ответ 3

Эта пустая строка относится к foo(), поэтому я считаю, что A является наиболее естественным. Но я думаю, это просто вопрос мнения.

Ответ 4

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

Для языка, такого как Python, где нет конечной инструкции или закрывающей скобки, я удивлен, что это не часть PEP. Настоятельно рекомендуется редактировать Python с белым пробелом дисплея, чтобы избежать как конечных пробелов, так и смешанных отступов.

Сравните следующие значения:

А)

def foo():
....x = 1
....y = 2
....
....if True:
........bar()

В)

def foo():
....x = 1
....y = 2

....if True:
........bar()

В A гораздо яснее, что последние две строки являются частью foo. Это еще более полезно при более высоких уровнях отступов.

Ответ 5

TextMate прерывает сбой блока, если вы используете B, и я предпочитаю A в любом случае, поскольку он более "логичен".

Ответ 6

Я бы не стал называть первый пример "сломанным", потому что знаю, что некоторые люди ненавидят его, когда курсор "отскакивает" при перемещении курсора вверх или вниз по коду. Например. Visual Studio (не менее 2008) автоматически предотвращает это, не используя пробельные символы в этих строках.

Ответ 7

Мой опыт разработки с открытым исходным кодом заключается в том, что в пустых строках нельзя оставлять пробелы. Также никогда не следует оставлять заходящее белое пространство.

Это вопрос кодирования этикета.

Ответ 8

Emacs делает B) для меня, но я действительно не думаю, что это имеет значение. A) означает, что вы можете добавить строку с правильным отступом без табуляции.

Ответ 9

vi неявно препятствует поведению в A, потому что навигаторы {/} больше не работают должным образом. git явно запрещает его, выделяя его красным цветом при запуске git diff. Я также хотел бы утверждать, что если строка содержит пробелы, это не пустая строка.

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