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

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

A)

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

B)

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

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

    9 Solutions collect form web for “Отступ Python в "пустых строках"”

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

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

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

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

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

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

    A)

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

    B)

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

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

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

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

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

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

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

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

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

     
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.