Почему Python pep-8 настоятельно рекомендует использовать отступы над вкладками для отступа? - PullRequest
133 голосов
/ 23 сентября 2008

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

Есть ли основополагающая причина для предпочтения пробелов? Я бы подумал, что с вкладками работать гораздо проще.

Ответы [ 17 ]

1 голос
/ 23 сентября 2008

Поскольку python использует отступы для распознавания структуры программы, требуется четкий способ идентификации идентификаторов. Это причина выбора пробелов или табуляций.

Тем не менее, Python также придерживается строгой философии, согласно которой есть только один способ сделать что-то, поэтому должна быть официальная рекомендация для одного способа сделать отступ.

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

0 голосов
/ 26 февраля 2019

Я предполагаю, что большинство текстовых редакторов Linux по умолчанию выглядят смехотворно большими. Я не могу придумать какой-либо другой веской причины использовать пробелы над вкладками.

0 голосов
/ 26 февраля 2013

Помимо всех других уже названных причин (непротиворечивость, никогда не смешивая пробелы и табуляции и т. Д.), Я считаю, что есть еще несколько причин, о которых следует упомянуть конвенцию из 4 пробелов. Это относится только к Python (и, возможно, к другим языкам, где отступ имеет значение). Вкладки могут быть лучше на других языках, в зависимости от индивидуальных предпочтений.

  1. Если редактор не показывает вкладки (что случается, в зависимости от конфигурации, во многих случаях), другой автор может предположить, что ваш код использует 4 пробела, так как почти весь код Python является общедоступно делает; если у того же редактора ширина вкладки равна 4, могут произойти неприятные вещи - по крайней мере, этот бедняк потеряет время из-за проблемы с отступами, которую было бы очень легко избежать, придерживаясь соглашения. Поэтому для меня причина номер один - избегать ошибок в последовательности.

  2. Переосмысливая вопрос о том, какие из них лучше, вкладки или пробелы, следует спросить, каковы преимущества вкладок; Я видел много постов, восхваляющих вкладки, но мало веских аргументов для них; хорошие редакторы, такие как emacs, vi (m), kate, ... делают правильные отступы в зависимости от семантики вашего кода - даже без вкладок; одни и те же редакторы могут быть легко настроены для удаления отступов в Backspace и т. д.

  3. Некоторые люди имеют очень сильные предпочтения, когда речь заходит о их свободе в выборе внешнего вида / макета кода; другие ценят последовательность над этой свободой. Python резко уменьшает эту свободу, диктуя, что отступы используются для блоков и т. Д. Это может рассматриваться как ошибка или особенность, но вроде как при выборе Python. Лично мне нравится эта последовательность - когда начинаешь кодировать новый проект, по крайней мере, макет близок к тому, к которому я привык, поэтому его довольно легко читать. Почти всегда.

  4. Использование пробелов для отступа допускает «уловки компоновки», которые могут облегчить понимание кода; некоторые примеры из них перечислены в PEP8; например.

    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # the same for lists
    a_long_list = [1,
                   2,
                   # ...
                   79]
    
    # or dictionaries
    a_dict = {"a_key": "a_value",
              "another_key": "another_value"}
    

    Конечно, вышесказанное также можно записать как

    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
    
    # the same for lists
    a_long_list = [
        1,
        2,
        # ...
        79]
    
    # or dictionaries
    a_dict = {
        "a_key": "a_value",
        "another_key": "another_value"}
    

    Однако последний занимает больше строк кода, и иногда считается, что меньше строк лучше (т.к. вы получаете больше на одном экране). Но если вам нравится выравнивание, пробелы (желательно с помощью хорошего редактора) дают вам, в некотором смысле, большую свободу в Python, чем вкладки. [Ну, я думаю, что некоторые редакторы позволяют вам делать то же самое с вкладками;) - но с пробелами, все они делают ...]

  5. Возвращаясь к тому же аргументу, что и все остальные - PEP 8 диктует (хорошо, настоятельно рекомендует) пробелы. Если вы приходите в проект, который использует только вкладки, конечно, у вас мало выбора. Но из-за установления соглашений PEP 8 почти все программисты Python привыкли к этому стилю. Это значительно упрощает поиск консенсуса по стилю, который принимается большинством программистов ... и в противном случае согласие людей на стиль может быть очень сложным.

  6. Инструменты, помогающие реализовать стиль, обычно знают о PEP 8 без особых усилий. Это не очень хорошая причина, но просто приятно, что все работает прямо из коробки.

0 голосов
/ 06 августа 2011

О дискуссии между Джимом и Томасом Воутерсом в комментариях.

Проблема заключалась в том ... что ширина вкладок и пробелов могут различаться - и поскольку программисты не могут договориться о любой ширине - почему вкладки несут вину.

Я согласен с Джимом в этом - вкладки НЕ являются злом сами по себе. Но есть проблема ...

С пробелами я могу контролировать, как "МОЙ СОБСТВЕННЫЙ КОД" выглядит в КАЖДОМ редакторе мира. Если я использую 4 пробела, то независимо от того, в каком редакторе вы открываете мой код, он будет иметь одинаковое расстояние от левого поля. С вкладками я в зависимости от настройки ширины вкладок для редактора - даже для МОЕГО СОБСТВЕННОГО КОДА. И мне это не нравится.

Так что, хотя это правда, что даже пробелы не могут гарантировать согласованность - они, по крайней мере, дают вам больший контроль над внешним видом вашего СОБСТВЕННОГО кода везде - то, что вкладки не могут.

Я думаю, что это НЕ согласованность в программистах, пишущих код - но согласованность в редакторах, показывающих этот код - пробелы облегчают достижение (и навязывание).

0 голосов
/ 23 сентября 2008

Самое значительное преимущество, которое я могу сказать о пробелах над вкладками, заключается в том, что многие программисты и проекты используют заданное количество столбцов для исходного кода, и если кто-то фиксирует изменение, установив для табуляции 2 пробела, а проект использует 4 пробела в виде табуляции: длинные строки будут слишком длинными для окна редактора других людей. Я согласен, что с вкладками легче работать, но я думаю, что пространства легче для совместной работы, что важно в большом проекте с открытым исходным кодом, таком как Python.

0 голосов
/ 23 сентября 2008

Универсальная проблема с вкладками заключается в том, что они могут быть представлены по-разному в разных средах. В данном редакторе вкладка может содержать 8 пробелов или 2.
В некоторых редакторах вы можете управлять этим, а в других - нет.

Другая проблема с вкладками заключается в том, как они представлены в печатном виде. Я полагаю, что большинство принтеров интерпретируют вкладку как 8 пробелов.

С пробелами сомнений нет. Все выстроится так, как задумал автор.

0 голосов
/ 23 сентября 2008

Ты можешь взять свой торт и съесть его. Настройте редактор для автоматического расширения вкладок в пробелы.

(Это будет :set expandtab в Vim.)

...