Питон:используя 4 пробела для отступа.Почему?[закрыто]

StackOverflow https://stackoverflow.com/questions/1125653

Вопрос

При написании кода на python я использую только 2 пробела для отступа, конечно БОДРОСТЬ ДУХА-8 действительно рекомендую иметь 4 пробела, но исторически для меня это необычно.

Итак, может ли кто-нибудь убедить меня использовать 4 пробела вместо 2?Какие плюсы и минусы?

P.S.И, наконец, какой самый простой способ преобразовать всю существующую кодовую базу из 2 пробелов в 4?


P.P.S.PEP-8 также настоятельно рекомендует не использовать табуляции для выделения отступов. читайте здесь


Итак, подведем итог:

Плюсы:

  • Имейте больше места для упорядочивания при обертывании строки длиной более 80 строк.
  • Можно копировать код из фрагментов, и это просто работает.

Минусы:

  • С более глубоким уровнем вложенных операторов у вас остается меньше места для фактического кода.

Спасибо.

Это было полезно?

Решение

Все остальные используют 4 пробела.Это единственная причина использовать 4 пробела, с которой я столкнулся и принял.В глубине души я все еще хочу использовать табуляции (по 1 символу отступа на отступ, имеет смысл, не так ли?Отделите отступ от других пробелов.Меня не волнует, что вкладки могут быть отображаемый поскольку они разной ширины, это не имеет никакого синтаксического значения.Худшее, что может случиться, - это то, что некоторые комментарии не совпадают.Ужас!) но я смирился с тем, что, поскольку сообщество python в целом использует 4 пробела, я использую 4 пробела.Таким образом, я могу собрать код из фрагментов, написанных другими, и все это работает.

Другие советы

Мне нравится тот факт, что четыре пробельных символа красиво отступают от внутреннего кода функции, потому что def + один пробел составляет четыре символа.

def·foo():
····pass

Я думаю, реальный вопрос в том, почему пробелы, а не табуляции.

Вкладки явно лучше:

  • Это делает почти невозможно иметь несогласованный отступ (Я видел код, который обычно имеет отступы в 4 пробела, но затем некоторые части оказываются с интервалом в один пробел, и простым осмотром трудно определить, есть ли 7 или 8 пробелов...Этого не произошло бы с табуляциями, если бы вы не установили tabstop равным 1 пробелу).
  • Вкладка - это логический семантический представление для отступа, это позволяет вам (и любому другому разработчику) выбрать дисплей столько "пробелов" (или, скорее, столбцов), сколько вы хотите, не вмешиваясь в предпочтения других людей.
  • Это также меньше нажатий клавиш если у вас под рукой есть только "блокнот" (или другой фиктивный редактор).
  • Добавление и удаление вкладок - это симметричный операция.Большинство IDE могут автоматически вставлять 4 пробела при нажатии клавиши tab, но обычно они удаляют только 1 пробел при нажатии клавиши backspace (операция без отступа по-прежнему доступна как shift-tab, но это комбинация из двух клавиш), или вы используете мышь, чтобы щелкнуть по середине отступа и удалить один символ.
  • Они занимают всего 1 байт, а не 4 (умножьте на тысячи строк, и вы сэкономите несколько КБ!:p)
  • У вас на один вопрос меньше для достижения соглашения, потому что если вы решите использовать пробелы, то снова начнется обсуждение, чтобы выбрать, сколько их (хотя консенсус, кажется, составляет около четырех).

Преимущества пространств:

  • Гвидо они нравятся.
  • Вы не можете легко ввести здесь вкладку, это переносит фокус (хотя вы можете вставить ее).

Нет никакого "лучшего" отступа.Это религиозная тема священной войны.Четыре хороши тем, что этого достаточно, чтобы сделать отступ четким, но не настолько, чтобы весь экран был в основном заполнен пробелами и вам приходилось прокручивать по горизонтали, чтобы прочитать половину программы.

У него также есть преимущество в том, что он является "половинной вкладкой" по сравнению с историческим определением "вкладки".

Кроме этого, используйте все, что нравится вашей группе.Это как шоколад противванильный.

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

Довольно легко это сделать и с помощью скрипта на python.Просто сосчитайте все начальные пробелы, затем добавьте такое же количество в начало строки и запишите его обратно.

Бодрый настрой - это не ваш босс.Если он уже имеет отступ в 2 пробела, нет причин изменять весь ваш код, чтобы соответствовать ему.Вы могли бы следовать этому в дальнейшем, если действительно считаете, что это так важно, но, честно говоря, я этого не делаю.Вам лучше придерживаться того соглашения, которое обеспечивает вам (и вашим коллегам) наибольший комфорт как при чтении, так и при письме.

Любой приличный редактор (emacs, vim) абстрагирует всю эту чушь для вас.Он будет одинаково хорошо работать с пробелами или табуляциями, и его можно настроить на использование любого количества пробелов (или любой ширины пробела для символа табуляции).Он также может конвертировать между различными форматами без особых проблем (см. :retab команда в vim).

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

Тем не менее, я не могу удержаться, чтобы не ответить на другой вопрос...Я всегда предпочитал вкладки, поскольку это позволяет обойти всю проблему, и каждый может просматривать исходный код с заданной шириной по своему усмотрению.Кроме того, требуется намного меньше печатать, когда вы работаете в редакторах, которые не помогают при преобразовании текста.Что касается пробелов 2 на 4, то это чисто косметический аспект.

Также одной из причин является:если у вас есть какая-то длинная строка (длиннее 80 символов) и вы хотите разделить ее на 2, у вас будет только 1 пробел для отступа, что немного сбивает с толку:

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \
 and someotherstatementhere:
  # some code inside if block
  pass

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \
  and someotherstatementhere:
    # some code inside if block
    pass

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

Чтобы внести изменения, вам просто нужно изменить все пробелы в начале строки на те, которые в два раза больше.Есть много способов сделать это;в текстовом редакторе Vim я могу придумать два:во- первых:

:%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)

Это простое регулярное выражение, которое ищет одну или несколько пар пробелов в начале строки и заменяет их в два раза большим количеством пробелов, чем было найдено.Его можно расширить, чтобы сделать все файлы, открыв vim с помощью:

vim *.py

(или эквивалент), за которым следует (непроверенный):

:argdo %s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)/ | w

Альтернативно:

" Switch to hard tabs:
:set noexpandtab
" Set the tab stop to the current setting
:set tabstop=2
" Change all spaces to tabs based on tabstop
:retab!
" Change the tab stop to the new setting
:set tabstop=4
" Go back to soft tabs
:set expandtab
" Replace all the tabs in the current file to spaces
:retab

Конечно, многие другие инструменты будут предлагать аналогичные функции:Я был бы удивлен, если бы что-то вроде sed, awk, perl или python сделать это было не так-то просто.

Стандарты идентификации и общего стиля кодирования варьируются от языка к языку, от проекта к проекту.Есть одна причина для принятия стандарта стиля кодирования:чтобы код выглядел единообразно, независимо от того, кто его написал.Это улучшает разборчивость проекта, и, грубо говоря, он выглядит лучше.

Существует одна причина, которая недопустима при принятии стандарта стиля кодирования:потому что тебе это нравится.Стандарты кодирования существуют именно потому, что предпочтения людей различаются, и если их предоставить самим себе, наступит хаос в ущерб всем.

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

Что касается изменения размера вкладки, существует множество программ форматирования исходного кода, поддерживающих Python, и большинство программных редакторов и IDE также имеют такую возможность.Вероятно, у вас это уже есть, нужно просто ознакомиться с документацией к используемому вами редактору.

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

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

Проще визуально идентифицировать длинные вложенные блоки кода с помощью 4 пробелов.Экономит время при отладке.

Если вы хотите писать код на python вместе с другими программистами, это становится проблемой, если вы используете другой отступ, чем они.Большинство программистов на Python, как правило, используют отступ в 4 пробела.

использование 4 пробелов или 2 полностью зависит от вас.4 пробела - это просто условность.Что самое главное, не путайте табуляцию и пробелы.Используйте пробел

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top