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

при кодировании python я использую только 2 пробела для отступа, конечно PEP-8 очень рекомендую иметь 4 места, но исторически для меня это необычно.

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

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


П. П. С. Пеп-8 также srictly не рекомендуем использовать табы для отступов. читать вот!--2-->


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

плюсы:

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

плюсы:

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

спасибо.

13 ответов


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


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

def·foo():
····pass

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

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

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

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

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

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

Он также имеет преимущество быть "половиной вкладки" с историческим определением " вкладки."

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

легкий способ переключаться - это использовать редактор с поддержкой tab и space-tab. Преобразуйте все ведущие вкладки в вкладки, установите размер вкладки в четыре, а затем преобразуйте ведущие вкладки обратно в space-tabs.

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


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


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

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


также одна из причин: когда у вас есть длинная строка (длиннее 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 не мог сделать это очень легко.


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

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

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

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


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

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


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


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


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