Почему Python не требует ровно четырех пробелов на уровень отступа?
Пробел - это значение в Python в том, что блоки кода определяются их отступом.
Кроме того, Guido van Rossum рекомендует использовать четыре пробела на уровне отступа (см. PEP 8: Руководство по стилю для кода Python).
Какова была причина, по которой не требовалось ровно четыре пробела на уровень отступов? Существуют ли технические причины?
Похоже, что все аргументы, которые могут быть сделаны для создания пробелов, определяют блоки кода, также могут использоваться для аргумента для установки точной длины пробега для одного уровня отступов (скажем, четырех пробелов).
Ответы
Ответ 1
Нет технических причин. Было бы не слишком сложно модифицировать интерпретатор Python, чтобы потребовать ровно четыре пробела на уровень отступа.
Вот один из вариантов использования для других уровней отступов: при вводе в интерактивный интерпретатор очень удобно использовать одномерные отступы. Это экономит на вводе, проще подсчитать количество пробелов правильно, и читаемость не является серьезной проблемой (поскольку код даже не сохраняется в файле).
Ответ 2
Другой случай, который я только что встретил в списке рассылки [email protected] - Слепой программист, который работает в Python, использует программу чтения - очевидно, программа-читатель не очень любит многократные пробелы, поэтому проще на него для использования одного пространства.
На самом деле нет хороших или технических причин, требующих ровно 4 пробела, и я считаю, что лучший аргумент против требования заключается в том, что программисты ненавидят, чтобы их ограничивали, особенно глупыми и несколько произвольными правилами. Конечно, мы все согласны с тем, что 4 пробела лучше всего, и большинство из нас имеют редакторы, автоматически устанавливающие наш отступ, но в случаях, когда вы не хотите использовать 4 пробела - один из script кода и т.д. - вы теперь оттолкнули программиста который чувствует сокрушительную руку произвольного (стиля) требования.
Важность пробела не является проблемой для большинства людей по нескольким причинам. Во-первых, я не могу придумать ни одного (хорошего) программиста, который бы утверждал, что правильное форматирование кода - это плохо. Во-вторых, логика требует от нас разделить наш код на блоки. Многие языки используют {} разделители. В сборке обычно это метки. Выбор пробела на Python на самом деле довольно естественный, по крайней мере, для английского языка. Когда вы читаете книгу, газету или сообщение в блоге, когда кто-то делает цитату, она обычно имеет отступы. Абзацы разделяются пустой строкой или двумя. Главы обычно разделяются пробелом в конце страницы и пустым пространством в начале следующего. Таким образом, пробелы - это хорошо, но заставить программистов придерживаться вашего конкретного стандарта заставит программистов пойти делать что-то еще с их временем.
Ответ 3
Использование 1 пробела (или вкладки) экономит место при игре с кодом: -p
Ответ 4
См. PEP 666 - Отклонить глупое отступы
Ответ 5
Joel Лучшая написание программного обеспечения Антология начинается с интересного и провокационного эссе Кена Арнольда "Стиль - это вещество", от записи Кена вы также можете прочитать здесь. Это хорошо аргументированное эссе с тезисом, и я цитирую, что "единственный способ добраться от места, где мы находимся до места, где мы перестаем беспокоиться о стиле, - это обеспечить его как часть языка".
Это единственное эссе, которое я когда-либо читал, предлагая, чтобы компиляторы языков блокировали все аспекты стиля (например, ваша идея о блокировке количества отступов была бы частью этого - не только в Python, либо... Кен главным прошлым вкладом является Джини, проклятия, джавапы, изгои и части Корбы, ничто не связанное с Питоном). Это действительно хорошие моменты, и в комментариях к онлайн-версии вы можете увидеть некоторые контрапункты (увы, не обязательно одинаково хорошо аргументированные).
Мне кажется ироничным, что один ответчик говорит о "Фортране и его сильных правилах форматирования"; это похоже на кого-то, кто никогда не использовал Фортран, или использовал его с очень мелким и предельным пониманием этого. Сколько языков вы знаете, где вы можете писать, например,
total count = 1 000 000
...? В Фортране вы можете! Пространства не имеют значения и игнорируются компилятором внутри обоих идентификаторов и числовых литералов, поэтому вам не нужно использовать символы подчеркивания или верблюда, чтобы использовать многословные идентификаторы (просто используйте пробелы между словами!), И легко сделать большие числа доступными для чтения слишком. Некоторые языки применяют такие правила, но большинство запрещает пробелы в идентификаторах и числах.
Конечно, гибкость стиля всегда сопряжена с рисками ошибок, например, в случае Fortran,
DO 10 I = 1. 5
присваивает переменной DO10I
номер 1.5, а почти-неразличимый
DO 10 I = 1, 5
петли пять раз на блоке отсюда до строки 10 (я считаю, что в реальном мире ошибка, подобная этой одноточечной, вместо запятой, резко меняющая смысл кода - однажды поврежденная космическая миссия, t вспомните точные детали).
Итак, пожалуйста, не принимайте Fortran в качестве примера за или против "блокировки", потому что во многих стилистических аспектах он настолько невероятно свободен, а не!
Некоторые примеры блокировки включают в себя современные языки, которые принимают, например. (заглавные инициалы для классов и т.д.). Я считаю, что Ruby, по крайней мере, предупреждает об этом, а некоторые другие языки фактически дают ошибки компилятора, если вы (например) называете класс строчным начальным или не-класс с верхним регистром. Я думаю, что полученная в результате единообразность является хорошей вещью, и я не понимаю, почему это должно быть иначе, когда принудительный аспект стиля является расстоянием, а не оболочкой и т.д. IOW, Арнольд в основном убедил меня в этом: -).
Ответ 6
Несмотря на то, что подразумеваются последовательные отступы внутри одного блока, нет никаких последствий, поскольку уровни отступов между блоками должны быть одинаковыми или разными. Другими словами, какой смысл?
Сравнение его с запросом на пробелы не является действительно действительным, поскольку пробел является частью синтаксиса Python: он определяет область видимости. До тех пор, пока область действия может быть однозначно определена, почему мы заботимся о том, сколько пространств используется для ее определения? Какая польза будет предложена, заставляя всех использовать какое-то (полностью произвольное) фиксированное количество пробелов?
Что делать, если ваш текстовый процессор заставил вас абзацы отступать ровно четыре пробела? Это было бы раздражать, и это не имело бы цели. Он не должен служить цели, чтобы иметь фиксированное число пробелов.
Подумайте об этом так: Python не имеет требования "пробелов", поскольку у него есть требование, чтобы вы нашли способ определить область без фигурных скобок. То, что выпало из этого, было пробелом, и заявив, что оно имеет "требование к пробелам", проще и очевиднее, чем сказать, что оно имеет требование "определение области видимости без привязки", поэтому для краткой связи мы просто говорим, что оно имеет "пробелы" Требование '; -)
Ответ 7
Python - это быстрое создание прототипов. Многие хорошие проекты работают только потому, что у большинства программистов Python есть хорошие практики. Поэтому мы не зависим от аксессуаров и мутаторов, а также от Java, и мы можем обращаться к индексам массивов с отрицательными числами.
По моему мнению, ограничение пробелов до 4 и запрещение вкладок не делает Python более читабельным в крупномасштабном масштабе. В течение долгого времени было очень мало вопросов из-за хорошей практики, которую мы защищаем.
Я действительно этому верю.
Python поставляется с удобством.
Ответ 8
reindent.py изменяет любой файл python, чтобы использовать отступы с 4 пробелами и никаких жестких символов табуляции.
Наличие этой удобной утилиты устраняет необходимость принуждать других программировать
Python в стиле 4-х сторон.
PS. Программисты Perl, Java, C проводят много циклов мозгов, суетившись с ошибками синтаксиса с запятой. Каждый цикл мозга, потраченный впустую на синтаксический пух, - это цикл, который не требует решения реальных проблем программирования. Одним из преимуществ Python для быстрого развития является то, что он минимизирует правила синтаксиса, которые в конечном итоге теряют мозговые циклы. Поэтому меньше требований к синтаксису лучше, чем больше.
Ответ 9
Помимо приведенных выше причин, существует еще одна действительно хорошая причина, по которой вы хотите, чтобы интерпретатор поддерживал минимальный отступ: экономия места. Из-за ограничений замораживания байт-кода Python не всегда удобно отправлять что-то только с помощью .pyc файлов вместо реального кода. Это означает, что если вы пишете код для работы на платформе с очень ограниченным пространством (скажем, маршрутизатором OpenWRT), имеет смысл сохранить минимальное количество пробелов для экономии места на диске.
Вот почему я написал pyminifier
Ответ 10
Python уже отличается от других языков тем, что пробелы и разрывы строк настолько значительны. Это уникальная часть языка и очень полезна для работы, конечно, но я думаю, что это ограничение уменьшит гибкость.
Кроме того, мне нравятся два пробела.... Я буду вынужден писать свои программы с двумя пробелами, а затем запускать их через удвоитель пространства script как шаг компиляции.
Ответ 11
Чтобы избежать проблем, возникающих с требованием make
, чтобы иметь символы табуляции перед каждым действием.
Например, это боль, если у вас есть табуляция, равная четырем пробелам, и вы щелкаете вперед и назад из файла .c
и Makefile