Вкладки и пробелы в программировании на Python

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

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

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

Ответ 1

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

Ответ 2

Устали от погони за опечатками отступа (8 пробелов? нет, 7 oops 9...) Я переключил свои источники на "только вкладки".

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

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

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

Ответ 3

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

Ответ 4

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

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

/отходит от soapbox

Ответ 5

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

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

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

Ой! И использование клавиш со стрелками для навигации влево и вправо всегда является болью в заднице, когда она пробегает.

UPDATE: Sublime Text 3 теперь удаляет полную мягкую вкладку с помощью клавиши backspace; хотя навигационная клавиша со стрелкой все еще утомительна.

Tabs vs. Spaces for Indentation

UPDATE: теперь я использую vscode, а также написал расширение TabSanity для его решения по обратному пространству, удалению и навигации по стрелке.

TabSanity Extension in Action

Ответ 6

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

Ответ 7

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

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

  • Для отступа, отступа и прохождения отступа требуется меньше нажатий клавиш. (Даже если у вашей 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.

Ответ 8

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

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

Ответ 9

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

Ответ 10

Вы можете смешивать вкладки и пробелы... НО табуляция считается тем же самым отступом, что и 8 пробелов, поэтому, если ваш редактор не настроен, чтобы рассмотреть вкладку на 8 пробелов, которые вы просите о проблемах при их смешивании.

Ответ 11

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

Ответ 12

Правило вкладок. Тот же аргумент для вложенных циклов, и вы хотите, чтобы внешний контур "вернулся" на 1 уровень. Совет. Если вы хотите преобразовать старый пробельный код python в вкладки, используйте утилиту TabOut, доступную как исполняемый файл на http://www.textpad.com/add-ons/.

Ответ 13

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

Ответ 14

Когда я впервые изучал Python, меня немного отвлекла идея значительного пробела, так как большинство языков, чтобы использовать его, были негибкими. Тем не менее, я был впечатлен способностью Python понимать различные стили отступа. Рассматривая, какой стиль использовать для нового проекта, я думаю, важно помнить две вещи.

  1. Во-первых, важно понять, как Python интерпретирует отступы. Брайан Оукли упомянул о возможности ошибок при каждом использовании вкладок, но на самом деле это невозможно с настройками интерпретатора по умолчанию. Это лучшее объяснение этого в Learning Python от O'Reilly Media.

В принципе, существует переменная (которая может быть изменена путем включения комментария вверху исходного файла # tab-width:), который определяет ширину табуляции. Когда Python встречает вкладку, она увеличивает расстояние отступа до следующего кратного ширины табуляции. Таким образом, если в левой части файла вводится пробел, за которым следует вкладка, следующий кратный ширины табуляции равен 8. Если вкладка сама по себе вводится, происходит то же самое.

Таким образом, безопасно, если ваш редактор настроен правильно, использовать вкладки и даже смешивать вкладки и пробелы. До тех пор, пока вы устанавливаете стопку вкладки редактора на ту же ширину, что и декларация ширины табуляции Python (или 8, если она отсутствует). Как правило, плохая идея использовать редактор с шириной табуляции, отличной от 8 пробелов, если вы не укажете ширину табуляции в файле.

  1. Во-вторых, большая часть синтаксического дизайна Python заключается в том, чтобы поощрять читаемость кода и согласованный стиль между программистами в одном проекте. Тем не менее, вопрос становится для любого конкретного проекта тем, что сделает код наиболее читаемым людьми, работающими над проектом. Конечно, рекомендуется придерживаться последовательного стиля отступов, но в зависимости от платформы и редактора, используемого проектом, другой стиль может иметь смысл для разных проектов. Если нет веских причин не соответствовать PEP 8, то имеет смысл сделать это, потому что это будет соответствовать тому, что ожидают люди.

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

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

Кроме того, Python 2.x имеет возможность -t выдавать предупреждения о смешанных вкладках и -tt и -tt для выдачи ошибки. Это применимо только к смешанным вкладкам и пространствам внутри одной и той же области. Python 3 предполагает -tt и, насколько я понял, нет возможности отключить эту проверку.

Ответ 15

Ошибка редактора-редактора возникает, когда у вас смешанный отступ внутри файла. Это возникает следующим образом: блок кода имеет отступы с 4 пробелами, а затем один уровень отступов "в", он имеет отступы с вкладками. Теперь язычник, который сделал это (смешение вкладок и пробелов), сделал это так, чтобы его вкладки были также 4 пробелами, поэтому он не видит проблем, и Python не видит проблем.

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

Урок здесь заключается в том, что вы никогда не должны смешивать вкладки и пробелы. Если вы придерживаетесь этого, тогда легко добавить код в пробелы или вкладки, независимо от того, что вы лично используете. Лучший способ убедиться, что вы не смешиваете вкладки и пробелы, - это всегда запускать python с -tt, что приведет к ошибке при -tt вкладок и пробелов.

Что касается вкладок и пробелов, я лично использую вкладки с таким отдельным отступом от внешнего вида - гораздо проще изменить внешний вид кода, когда он имеет отступы с вкладками, чем с пробелами. Я знаю, что это противоречит тому, что делают 99% программистов на Python, но это мои личные предпочтения, и в любом случае легко конвертировать файл с вкладками в разнесенный. Обратное не всегда верно, так как вы можете случайно удалять 4 пробела в строках и т.д.

Ответ 16

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

  • Используйте вкладки в С++ и пробелы в Python. Это позволяет моим файлам С++ оставаться такими, какими они есть, и я следую рекомендации PEP-8, но я не согласен в своем проекте.
  • Измените мой код на С++, чтобы использовать пробелы. Это позволяет всем моим файлам в моем проекте быть последовательными, и я следую рекомендациям PEP-8, но мне требуется вернуться и изменить все мои файлы на С++. Я считаю это плохой, потому что предпочитаю вкладки.
  • Используйте вкладки в моем коде на С++ и в коде Python. Это делает весь мой проект согласованным и позволяет мне использовать мой предпочтительный стиль отступа: вкладки. Недостатком является то, что я не следую стандарту PEP-8.

Для моих проектов я обычно выбираю вариант 3.

Ответ 17

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

Если это пробелы TAB или, то это должно быть пробелы по простой причине: можно переключить почти все IDE и текстовые редакторы, чтобы автоматически заменить вкладки пробелами, но противоположное неверно.

Несмотря на то, что есть IDE, которые могут автоматически преобразовывать ведущие пробелы в строке на вкладки, это в конечном итоге приведет к смешению вкладок и пробелов. Рассмотрим многострочные операторы, такие как вызовы функций с большим количеством параметров или строк документа. В то время как "ascii-art" также следует избегать, это может случайно произойти случайно, что после первых вкладок осталось одно пространство.

Другие ответы привели несколько аргументов в пользу вкладок:

  • Нажатие TAB более эффективно. Конечно, это верно, но все текстовые редакторы позволяют сразу вставить нужное количество пробелов при нажатии клавиши табуляции.
  • Отступ/децентрация проще, когда нужно просто удалить одну вкладку вместо 2/3/4/8 пробелов. Правда, но большинство текстовых редакторов позволяют это сделать автоматически: выбор блока, отступ/разделитель - это базовая функциональность редактора программ, например комментирование/раскомментирование. Если текстовый редактор не реализован, он должен по крайней мере иметь простую в использовании функциональность макросов, с помощью которой можно добиться того же.
  • Различные программисты, такие как разные ширины отступов. Это верно и явное преимущество использования TAB. Проблема заключается в взаимодействии с другими людьми и/или командами. Чтобы это работало в реальном мире, всем приходилось согласовывать все, используя только TAB. Так как этого не произошло, оно все равно не работает. В сценарии реального мира есть набор правил кодирования, которые в любом случае согласуются с проектом, и метод отступов, безусловно, один из них - даже на других языках программирования, где последствия "только" на визуальном уровне.

Imho, главное, что большинство (если не всех) ответов отсутствует здесь, - это взаимодействие между командами или отдельными лицами, особенно в сценариях, где список участников не знает в начале. Когда код соответствует коду, либо все должны использовать вкладки, либо все должны использовать пробелы. Его нельзя смешивать, не вдаваясь в проблемы с функциональностью. Люди не идеальны. Инструменты не идеальны. Вот почему imho мы не должны использовать TAB вообще.

Нет ответа без ссылки, которую Greg предоставил в своем ответе: Python: Мифы об отстуке

Ответ 18

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

Ответ 19

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

def foobar():
    x = some_call(arg1,
                  arg2)

В этом случае использование чисто вкладок не будет работать вообще; использование вкладок для основного отступа и пробелов для под-отступа будет работать, но будет нарушать жесткое правило не смешивать два.

Однако это не будет иметь место при использовании документа стиля/условных обозначений кодирования, который позволяет избежать ситуаций, подобных приведенному выше примеру кода.

Ответ 20

В дополнение ко всем приведенным аргументам я считаю это достаточно важным (из Мифы о отступе):

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

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

Аргументы для, о которых никто, казалось, еще не упомянул, состоит в том, что 1 вкладка - 1 символ (0x09, 1 байт в файле), а 4 пробела - 4 символа (4 раза 0x20, 4 байта в файле); таким образом, использование пробелов приводит к 4-кратной трате пространства.

Чтобы завершить этот бессвязный список аргументов, я хотел бы привести Тим Петерс в ответ на Issue 7012: вкладки лучше, чем пробелы для отступа:

Стандарт "пространства только для Python" предназначен для распределенный код. Годы раннего опыта научили нас сомневаться в том, что вкладки вызвали бесконечные проблемы для общего кода (...)

Ответ 21

Это PEP 8 по состоянию на июль 2017 года:

Enter image description here

Кажется, это выражение не оставляет места для любого другого выбора.

Но это не только то, что нам говорит PEP 8, несколько строк позже:

Enter image description here

В приведенном выше примере первый оператор выражает предпочтение пробелам, а второй оператор подтверждает существование кода с отступом с вкладками и этим предпочтением для некоторых кодеров.

Итак: PEP 8 является толерантным отступом табуляции. Он не допускает смешения таблиц и пробелов для отступов, хотя, поскольку отступы сами по себе являются обязательными, понятно.

Возможно, стоит упомянуть, что стиль кодирования Google Python также следует за правилом с четырьмя пробелами.

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

Если вы работаете в компании, которая обеспечивает соблюдение PEP 8, или регулярно делитесь своим кодом с другими людьми, которые следуют за PEP 8, тогда здравый смысл диктует 4-пространство. Я (возможно, был) использован для вкладок из C/C++. Но с правильно установленной IDE разница становится минимальной.

Ответ 22

Проблема с использованием пробелов вместо вкладок - размер файла становится настолько невероятно большим. Например, файл с пространственно-отступом размером 500 КБ может быть уменьшен до 200 кб при замене пробелов для вкладок, поэтому я всегда использую вкладки.

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

Для меня нет смысла использовать пробелы, но если кто-то использует редактор, который имеет проблемы с вкладками, то они могут заменить "\ t" на "" или "" или что-то еще..

Ответ 24

Как это имеет значение?

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

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

Да, есть другие веские причины, о которых говорили многие ответы передо мной. Однако "PEP-8" говорит, что это НЕ одна из этих причин. Это происходит из самовоспроизводящегося мифа о том, что PEP-8 является стандартом кодирования для всего кода Python, когда на самом деле это всего лишь стандарт кодирования для стандартного набора библиотек Python. Некоторые утверждают, что PEP-8 широко принят, а некоторые утверждают, что большинство программистов на Python используют пробелы вместо вкладок. Я хотел бы попросить доказательства этих претензий, поскольку количество голосов на этом сайте ЧИСТОЕ показывает, что вкладки предпочитаются массами. Мне очень жаль, что вы приняли "PEP8 говорит так", как ответ на ваш вопрос, когда на самом деле есть много других ответов, которые фактически объясняют относительные преимущества и недостатки пробелов и вкладок.

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

Это зависит, и ответ на этот последний вопрос заключается в том, где я думал, что могу добавить некоторую ценность в этот поток. ИМХО, независимо от используемого языка, лучший используемый стандарт кодирования зависит от ситуации, в которой вы находитесь:

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

Так в какой ситуации вы попадаете?

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

Ответ 25

Я считаю, что есть решение:

  1. Совместимость с PEP-8 и использование пробелов
  2. Удобство использования вкладки вместо 4 пробелов

В Notepad++ перейдите в "Настройки" → "Настройки вкладки" и выберите "Python" из списка справа. Затем убедитесь, что "размер вкладки: 4", и установите флажок "заменить [вкладку] пробелом". В этом случае вы можете просто использовать клавишу табуляции для отступов, но Notepad++ фактически преобразует это в 4 пространства для вас.

Ответ 26

Итак, здесь я читаю все ответы и задаюсь вопросом, как я могу выполнить PEP-8 без раздражения, чтобы многократно стучать по моей обратной стороне, чтобы удалить отступ, и я смотрю на свою игровую клавиатуру Logitech со всеми ее причудливыми макрокомандами и светом лампочка загорается в моей голове. Открытое программное обеспечение logitech, определило пару макросов для кнопок рядом с кнопкой вкладки, и проблема решена. Одна кнопка добавляет четыре пробела, другая - четыре раза. Удивительно. Просто великолепно. Так легко попасть в кнопки с моим мизинцем. Смотрите, проверьте это: "" <- четыре пробела! Одним нажатием кнопки! Если бы я мог показать вам пробелы, я тоже это сделаю. Идите, возьмите клавиатуру Logitech G105, и все ваши проблемы исчезнут!

Ответ 27

Я только начинаю, но мне гораздо проще использовать вкладки, чем пробелы, и не понимаю, как использовать PEP-8 только пробелы. Sublime Text 2 отлично справляется с визуализацией вкладок с нечеткой вертикальной, пунктирной линией, и, хотя есть случаи, когда я смешиваю пространство или два, чтобы выстроить элементы списка или словаря, я не испытывал ситуации, когда это быть вредным.

Ответ 28

Мне нравятся вкладки, но это как-то несовместимо с другим правилом, которое мне нравится: предел в 80 столбцов.

Если вы выбираете 4 пробела и вставляете 10 вкладок, то для выполнения 80-ти столбцов для пробела осталось 40 символов. Если другой кодер предпочитает 8 пробелов, одна и та же строка будет отображаться в виде 120 символов и не будет отображаться как допустимая строка из 80 столбцов!

Если вы хотите определить предел в 80 столбцов, вам нужно выбрать длину для вкладки. В этом случае наличие x пробелов или вкладка длины x на самом деле не имеет значения.

Изменить: связанный поток: Поддержание максимальной длины строки при использовании вкладок вместо пространств?

Ответ 29

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

В качестве некоторых конкретных примеров рассмотрим рендеринг докстронтов Python во всплывающей подсказке в Visual Studio Code или в инструменте diff, таком как Beyond Compare или WinMerge, инструментах для обеспечения производительности или кода и т.д. В принципе, все эти различные другие инструменты сопряжения могут иметь разные настройки для как интерпретируются вкладки, и это может раздражать и порой дезориентировать, чтобы найти вещи, совершенно разные или оттолкнутые от экрана среди инструментов, которые вы можете погружать и выходить из.

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

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

cmd_create_db = '''CREATE TABLE test (
    Col1 INTEGER,
    Col2 INTEGER,
    Col3 TEXT)'''

вы можете увидеть что-то вроде следующего (см. встроенный терминал Visual Studio Code)...

>>> cmd_create_db = '''CREATE TABLE test (
... .DS_StoreCol1 INTEGER,
... .DS_StoreCol2 INTEGER,
... .DS_StoreCol3 TEXT)'''
>>> cmd_create_db
'CREATE TABLE test (\n.DS_StoreCol1 INTEGER,\n.DS_StoreCol2 INTEGER,\n.DS_StoreCol3 TEXT)'

(Кроме того: я задавался вопросом, является ли это наблюдение за согласованностью между инструментами знаками различного ума резкого разработчика, желающего упорядочить мир, который может указывать на разницу в зарплате, найденную в Stack Overflow.)

Ответ 30

Люди будут использовать разные редакторы по одному и тому же коду. Эти редакторы будут отображать вкладку на экране по-разному. Если вы работаете над редактором, который представляет вкладку в виде 4 пробелов, если вы отступаете в первой строке "\t " а второй - "\t\t", они будут выглядеть так, как будто они находятся в одном и том же отступе уровень: 8 пробелов.

Интерпретатор Python не знает вашего редактора, и он должен интерпретировать вкладку как некоторое количество отступов. Фактически, он интерпретирует вкладку как 8 пробелов, поэтому он будет видеть разные уровни отступа, чем то, что вы намеревались: 12 пробелов для первой строки, 16 пробелов для второго. Ты поджарен.