Помимо всех других уже названных причин (непротиворечивость, никогда не смешивая пробелы и табуляции и т. Д.), Я считаю, что есть еще несколько причин, о которых следует упомянуть конвенцию из 4 пробелов. Это относится только к Python (и, возможно, к другим языкам, где отступ имеет значение). Вкладки могут быть лучше на других языках, в зависимости от индивидуальных предпочтений.
Если редактор не показывает вкладки (что случается, в зависимости от конфигурации, во многих случаях), другой автор может предположить, что ваш код использует 4 пробела, так как почти весь код Python является общедоступно делает; если у того же редактора ширина вкладки равна 4, могут произойти неприятные вещи - по крайней мере, этот бедняк потеряет время из-за проблемы с отступами, которую было бы очень легко избежать, придерживаясь соглашения. Поэтому для меня причина номер один - избегать ошибок в последовательности.
Переосмысливая вопрос о том, какие из них лучше, вкладки или пробелы, следует спросить, каковы преимущества вкладок; Я видел много постов, восхваляющих вкладки, но мало веских аргументов для них; хорошие редакторы, такие как emacs, vi (m), kate, ... делают правильные отступы в зависимости от семантики вашего кода - даже без вкладок; одни и те же редакторы могут быть легко настроены для удаления отступов в Backspace и т. д.
Некоторые люди имеют очень сильные предпочтения, когда речь заходит о их свободе в выборе внешнего вида / макета кода; другие ценят последовательность над этой свободой. Python резко уменьшает эту свободу, диктуя, что отступы используются для блоков и т. Д. Это может рассматриваться как ошибка или особенность, но вроде как при выборе Python. Лично мне нравится эта последовательность - когда начинаешь кодировать новый проект, по крайней мере, макет близок к тому, к которому я привык, поэтому его довольно легко читать. Почти всегда.
Использование пробелов для отступа допускает «уловки компоновки», которые могут облегчить понимание кода; некоторые примеры из них перечислены в 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, чем вкладки. [Ну, я думаю, что некоторые редакторы позволяют вам делать то же самое с вкладками;) - но с пробелами, все они делают ...]
Возвращаясь к тому же аргументу, что и все остальные - PEP 8 диктует (хорошо, настоятельно рекомендует) пробелы. Если вы приходите в проект, который использует только вкладки, конечно, у вас мало выбора. Но из-за установления соглашений PEP 8 почти все программисты Python привыкли к этому стилю. Это значительно упрощает поиск консенсуса по стилю, который принимается большинством программистов ... и в противном случае согласие людей на стиль может быть очень сложным.
Инструменты, помогающие реализовать стиль, обычно знают о PEP 8 без особых усилий. Это не очень хорошая причина, но просто приятно, что все работает прямо из коробки.