Вкладки и пробелы в программировании на Python - PullRequest
323 голосов
/ 23 сентября 2008

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

Как это меняет дело? Существуют ли другие причины, по которым в Python вместо пробелов можно использовать пробелы? Или это просто неправда?

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

Ответы [ 34 ]

439 голосов
/ 22 ноября 2009

Надоело гоняться за опечатками (8 пробелов? Нет, 7 упс 9 ...) Я переключил свои источники на «только табуляции».

1 вкладка == 1 уровень отступа, полный стоп

Дело в том, что если вы хотите отобразить отступ в 4, 8 или пи / 12 символов ширины, просто измените настройки в текстовом редакторе, не связывайтесь с кодом.

(Лично я использую вкладку шириной 4 символа ... но некоторые предпочитают 3 или 8 пробелов или даже используют шрифты переменной ширины.)

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

Потому что PEP-8 говорит нам использовать пробелы.

193 голосов
/ 14 июня 2011

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

83 голосов
/ 19 мая 2010

ИСПОЛЬЗУЙТЕ РЕДАКТОР, КОТОРЫЙ ОТОБРАЖАЕТ ТАБЛИЦЫ (в данном случае все пробелы). Вы программируете, а не пишете статью.

Я использую вкладки. Там нет места для ошибки одного пробела во вкладках (если вы можете видеть их). Проблема в том, что люди используют разные редакторы, и единственная распространенная вещь в мире: tab == indent, как указано выше. Некоторые парни приходят с ключом табуляции, установленным на неправильное количество пробелов, или делают это вручную и создают беспорядок. Вкладки и использовать настоящий редактор. (Это не просто противоречит PEP, это касается C / C ++ и других языков, не зависящих от пробелов).

/ отходит от мыльницы

70 голосов
/ 05 марта 2010

Моя основная причина использования табуляции через пробел - клавиша возврата. Если я нахожусь на линии и я хочу вернуться назад - убрать отступ только на одной строке, я должен нажать клавишу Backspace 4x, если это были пробелы; в то время как мне нужно нажать только один раз, если это вкладка.

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

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

Oh! А использование клавиш со стрелками для навигации влево и вправо всегда вызывает боль в заднице, когда она пробела.

ОБНОВЛЕНИЕ: Sublime Text 3 теперь удаляет полную программную вкладку с клавишей возврата; тем не менее, навигация с помощью клавиш со стрелками все еще утомительна.

Tabs vs. Spaces for Indentation

ОБНОВЛЕНИЕ: теперь я использую vscode , а также написал расширение TabSanity для решения задач возврата, удаления и нажатия клавиш со стрелками.

TabSanity Extension in Action

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

Самый «питонный» способ - использовать 4 пробела на уровень отступа. Однако интерпретатор Python распознает пробелы или табуляции. Единственное, что надо - вы никогда не должны смешивать пробелы и табуляцию , выбирать одно или другое. Тем не менее, в спецификации рекомендуются пробелы, большинство разработчиков используют пробелы, поэтому, если у вас нет действительно веской причины не делать этого, я бы сказал, пробелы.

45 голосов
/ 19 октября 2012

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

Плюсы вкладок:

  • Меньше нажатий клавиш требуется для отступа, отступа и прохождения отступа. (Даже если у вашей IDE есть некоторый ум с отступом в пространстве, он никогда не будет так хорош, как табуляция.)
  • Различные программисты могут использовать разные размеры вкладок по своему усмотрению.
  • У вас никогда не будет курсора "внутри" символа отступа. Например, предположим, что вы копируете некоторые строки, со вкладками вы можете неопределенно щелкнуть рядом с началом строки, чтобы начать свой выбор, и вы получите все первые вкладки. С пробелами вы можете пропустить первый пробел, если не попадете в крошечную цель между ним и полем. Точно так же, чтобы удалить отступ из строки, большинство редакторов не справляются с нажатой клавишей Backspace, если курсор находится в середине символа отступа в четыре пробела. Это обычно удалит один пробел. С вкладками работает как положено.
  • Согласованность с другими языками, поэтому вам не нужно настраивать ваш редактор для использования, например вкладки для C ++ / Java и пробелы для Python.
  • Неправильные отступы могут быть более очевидными (то есть дополнительная вкладка намного больше, чем дополнительный пробел).

Минусы вкладок:

  • Большинство программистов на Python используют пробелы, поэтому вы будете идти против соглашения.
  • Использование пробелов для выравнивания многострочных операторов проще, чем использование вкладок. Вы могли бы использовать табуляцию для отступа, пробелы для выравнивания, но в Python это кажется немного рискованным!

Есть некоторые проблемы, которые некоторые люди игнорируют:

  1. Вы можете получить пустые места в отступе с вкладками, что испортит ситуацию: практически все IDE / редакторы поддерживают визуализацию пробелов, и почти так же вероятно, что вы получите случайные вкладки в отступах пространства! Я не вижу, что это обычная ошибка в любом случае. Кроме того, большинство ошибок отступов будут обнаружены Python, и хорошие IDE должны иметь возможность выделять различные отступы.

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

  3. Люди имеют разные настройки размера отображения вкладок в своих редакторах, поэтому ваш код будет выглядеть по-разному в разных местах: Да, это действительно полезная функция вкладок.

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

Так что, если вам действительно не нравится несовместимость с большинством (предположительно не всеми!) Кодом Python, используйте вкладки и включите визуализацию пробелов и подсветку отступов (если доступно) , Самая главная причина для меня - это легкость выбора и (довольно значительное ИМО) уменьшение количества нажатий клавиш. Некоторые соглашения глупы.

Обновление : Я обнаружил, что во всем мире существует один редактор (исключая бессмыслицу, такой как Vim), который должным образом поддерживает пробелы как отступы: Atom. У него есть опция под названием «атомарные табуляции», которая заставляет 4 пробела вести себя так, как будто это вкладка во всех отношениях (кроме возможности изменить ее размер). К сожалению, Atom довольно медленный и раздутый редактор, но это отличная возможность, и если вы вынуждены использовать пробелы, это может быть хорошим вариантом. Надеюсь, однажды другие редакторы начнут поддерживать его. Вот проблема для VSCode .

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

Недавно я наткнулся на статью под названием Python: мифы об отступах , в которой обсуждаются этот и другие вопросы. В статье есть веские причины рекомендовать использование пробелов при написании кода Python, но, безусловно, есть место для разногласий.

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

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

Используйте редактор, который позволяет вставлять пробелы до табуляции при нажатии клавиши TAB вместо вставки символа \ t. А потом забудь об этом.

12 голосов
/ 25 сентября 2008

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

...