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

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

A)

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

B)

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

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

  • Инициализация / объявление атрибутов в классе Python: куда их поместить?
  • Фабричный метод для объекта python - лучшая практика
  • 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

    совместное использование: memory: database между различными потоками в python с использованием пакета sqlite3

    API Google Диска – ImportError: не может импортировать имя

    Почему subprocess.Popen не работает, когда args является последовательностью?

    Условия гонки в джанго

    Например, запрос: повторяющаяся нейронная сеть для прогнозирования следующего значения в последовательности

    Ajax succesfull call show div с данными формы

    Альтернативы ограничениям памяти Python Popen.communicate ()?

    Вложенный словарь для MultiIndex pandas DataFrame (3 уровня)

    ALTER TABLE Sqlite: как проверить, существует ли столбец перед изменением таблицы?

    упорядочивая перетасованные точки, которые могут быть соединены для формирования многоугольника (в python)

    Различия в пропускной способности при использовании сопрограмм и потоков

    JSON to pandas DataFrame

    Как принять keypress в командной строке python?

    установка линейной поверхности с наименьшим квадратом

    Ввод клавиатуры с тайм-аутом в Python

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