Вопрос по python, indentation – Почему Python pep-8 настоятельно рекомендует использовать отступы над вкладками для отступа?

131

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

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

1 уровень отступа ... 1. Совершенно нелогично договариваться об использовании N пробелов, когда вы все можете использовать одну вкладку. Что, кстати, именно для этого и предназначено. Отступ. Однажды. 1 уровень отступа = 1 одиночный символ, то есть 1 одиночная табуляция. И они более удобны, потому что каждый кодировщик может свободно выбирать, как его визуализировать. Использование пробелов глупо, я никогда не видел ни одного аргумента для этого, который не глуп. o0'.
@BlueBomber, и почему вы не принуждаете людей выбирать размер шрифта и цветовую схему, которая вам нравится, пока вы на ней? Все еще глупо. o0'.
Прочитайте обсуждение PEP, чтобы узнать. e-satis
@BlueBomber нет, нет, это точно на том же уровне абсурда. o0'.
@BlueBomber В чем именно разница? Вы уменьшаете степень свободы в конфигурации их среды другим разработчиком, не добиваясь заметного преимущества. Если вы хотите быть диктатором и заставлять всех смотреть на код с отступом, соответствующим 2, 4 или 29 пробелам, вы все равно можете сделать это с помощью вкладок. Просто попросите своих подчиненных установить их IDE для отображения вкладок в соответствии с вашим предпочтительным количеством пробелов. Если у вас нет полномочий для этого, возможно, вам следует позволить им самим решить, насколько широкая единица отступа удобна для их глаз. Asad Saeeduddin

Ваш Ответ

17   ответов
22

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

Однако ИМХО есть несколько незначительных причин отдавать предпочтение пробелам над вкладками:

Different tools. Sometimes code gets displayed outside of a programmer's editor. Eg. posted to a newsgroup or forum. Spaces generally do better than tabs here - everywhere spaces would get mangled, tabs do as well, but not vice-versa.

Programmers see the source differently. This is deeply subjective - its either the main benefit of tabs, or a reason to avoid them depending on which side you're on. On the plus side, developers can view the source with their preferred indentation, so a developer preferring 2-space indent can work with an 8-space developer on the same source and still see it as they like. The downside is that there are repercussions to this - some people like 8-space because it gives very visible feedback that they're too deeply nested - they may see code checked in by the 2-indenter constantly wrapping in their editor. Having every developer see the code the same way leads to more consistency wrt line lengths, and other matters too.

Continued line indentation. Sometimes you want to indent a line to indicate it is carried from the previous one. eg.

def foo():
    x = some_function_with_lots_of_args(foo, bar, baz,
                                        xyzzy, blah)

If using tabs, theres no way to align this for people using different tabstops in their editor without mixing spaces and tabs. This effectively kills the above benefit.

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

Также стоит прочитать этоэтот статья Джейми Завински по этому вопросу.

@ Брайан: я не вижу, как это приводит к каким-либо проблемам. Это абсолютно правильный путь, вкладки для отступа, пробелы для выравнивания. Это совсем не то же самое, что пространство для смешивания и вкладки дляindentation.
Выравнивание тривиально, хотя. Я просто использую скобки как блок и делаю отступ для каждого аргумента. Кроме того, в вашем примере вы очень хорошо можете использовать пробелы, поскольку вы находитесь внутри списка аргументов, и вы можете разместить там столько пробелов, сколько захотите.
@ Советский: если вы сделаете отступ с пробелами, выравнивание будет нарушено, как только оно будет просмотрено с другим размером вкладки. Единственный способ сохранить его - использовать вкладки до уровня отступа, а затем пробелы для остальных - т. Е. Смешивать пробелы и вкладки, что приводит к собственным проблемам.
Да, именно поэтому я склоняюсь к тому, чтобы в своих аргументах в любом случае использовать соглашение Python о отступе блоков. Конечно, они могут не совпадать с открытой скобкой, но все равно ясно, к какой строке или команде они принадлежат. Синтаксис JQuery работает по аналогичному принципу.
@CoreDumpError Нет, это точно не так. Я знаю это, потому что Python 3 никогда не жалуется ни на один из моих скриптов, и я использую вкладки для отступов / пробелов, чтобы выровнять все проклятое время. Кроме того, PEP8 не может «запретить» что угодно, так как это всего лишь рекомендация (и, на мой взгляд, заумная).
-1

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

-3

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

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

С пробелами сомнений нет. Все выстроится так, как задумал автор.

Еще один, кто в корне неправильно понял вкладку ... возьми механическую пишущую машинку и поиграй с ней некоторое время, правда! 1 вкладка не равна 8 пробелам! это равноup_to_8_spaces! otoh: с пропорциональными шрифтами вкладки являютсяonly способ гарантировать выравнивание.
"В данном редакторе вкладка может содержать 8 пробелов или 2". Если мне нравятся 4 пробела, а моему другу нравятся 8 пробелов или 2 пробела или 3 пробела или и т. Д. Тогда мы можем договориться о вкладках, потому что (посвященныйindentation символы) редактор знает, что они из себя представляют, и может отображать их соответствующим образом. Я вижу код с отступами в 4 пробела, вы видите его с отступами в 8 пробелов, наш странный друг использует его 3 пробела, и все круто. Обстоятельства (особенно в Python!), Когда ширина самой вкладки будет иметь значение, настолько редки, что даже сторонники пространства редко поднимают их.
27

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

У каждого приличного текстового редактора есть «заменить вкладки пробелами»; и многие люди используют это. Но не всегда.

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

Bottom Line, Вы не можете ошибиться с пробелами. Выmight пойти не так с вкладками. Поэтому не пользуйтесь вкладками и снижайте риск ошибок.

& quot; Вы не можете ошибиться с пробелами. Вы можете ошибиться с вкладками & quot ;. Я обнаружил, что это неправильно на 100%. По моему опыту: "Вы не можете ошибиться с помощью вкладок". Вы можете ошибиться с пробелами & quot; ... особенно при обмене кодом.
Я бы никогда не пообещал сделать что-то неправильно, просто потому, что многие другие (люди, текстовые редакторы и т. Д.) Также оказываются неверными. В 2015 году в мусорном ведре находится текстовый редактор, который плохо обрабатывает вкладки.
Мне кажется, что Argumentum ad populum: ошибочный аргумент, который заключает, что предложение верно, потому что многие или большинство людей верят в это. Поскольку каждый редактор может заменить табуляцию пробелами, пробелы - правильный выбор, это ошибка !!
Итак, кто-то наконец сказал это: используйте пробелы, потому что это самый низкий общий знаменатель. Это же правило заставляет нас придерживаться MBR, BIOS и бумажных форм в государственных учреждениях. За исключением того, что у них на самом деле есть концептуальные проблемы, в то время как табуляция против пробелов является 100% глупой пользовательской проблемой.
0

тического расширения вкладок в пробелы.

(Это было бы:set expandtab в Vim.)

25

что они невидимы, и люди никогда не могут договориться о ширине вкладок. Когда вы смешиваете табуляцию и пробелы и устанавливаете таб-стопы на что-то отличное от Python (который использует табуляции на каждые 8 пробелов), вы увидите код в другом макете, чем Python видит. А поскольку макет определяет блоки, вы увидите другую логику. Это приводит к тонким ошибкам.

Если вы настаиваете на игнорировании PEP 8 и использовании вкладок - или, что еще хуже, смешивании вкладок и пробелов - по крайней мере, всегда запускайте python с параметром & apos; -tt & apos; аргумент, который делаетinconsistent отступ (иногда табуляция, иногда пробел для того же уровня отступа) ошибка. Также, если возможно, настройте редактор так, чтобы вкладки отображались по-другому. Но на самом деле, лучший подход не использовать вкладки, точка.

Один пробел может всегда иметь одинаковую ширину, но отступ с пробелами не всегда одинаковой ширины. Я не понимаю, как согласиться использовать отступы шириной n пробелов отличается от согласия отступать от n пробелов.
Нет, то же самое не верно для пробелов. Люди могут договориться о ширине мест.
Это правда, что вкладки невидимы, и люди не могут договориться о ширине вкладок. Но то же самое верно и для пространств. Когда вы смешиваете табуляции и пробелы, все идет не так. Но почему вы обвиняете эту ситуацию на вкладках, а не на пробелах?
Да, я знаю, что проблемы смешивания могут вызвать Что я не понимаю, так это то, почему некоторые люди обвиняют это во вкладках. Проблема заключается в их смешивании, а не в вкладках. Вы можете решить проблему, заменив табуляцию пробелами, но вы также можете решить проблему, заменив пробелы табуляцией.
И нет, если я использую вкладки шириной 8, а вы используете вкладки шириной 6 и мы обмениваемся кодом, это не запутается. Это всего лишь одна вкладка интерпретатора Python.
37

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

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

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

Да, но это то, что я имел в виду. Некоторый консенсус в конечном итоге достигнут и применяется. Как вы сказали, обычно это просто "использовать пробелы".
@Soviut Это похоже на то, как мне хочется думать. Во всех командах, в которых я когда-либо участвовал, официальной линией вечеринки было "использовать пробелы". Реальность заключалась в том, что практически каждый файл представлял собой полный беспорядок как вкладок, так и пробелов, и даже в файлах, в которых последовательно использовались только пробелы или только вкладки, отступы все еще были повсюду.
это главная причина, почему я предпочитаю вкладки. Просто имеет смысл иметь отдельные символы для разметки и разграничения слов
Это хорошо, если вы не программируете в команде. Когда вы в команде, вы соглашаетесь с одним соглашением и придерживаетесь его.
Я пытался заставить себя тоже использовать пробелы, но мудрые вкладки редактора (по крайней мере, Eclipse + PyDev) выигрывают, особенно если вы включаете показ невидимых символов. И я могу легко установить вкладки на 4, 8, 6 пробелов визуально. Так что в моем коде, по крайней мере, я ценю личные предпочтения и придерживаюсь пробелов, если это является установленным соглашением в существующей кодовой базе.
-1

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

If an editor doesn't show tabs (which happens, depending on the configuration, in quite a few), another author might assume that your code uses 4 spaces, b/c almost all of the Python code being publicly available does; if that same editor happens to have a tab width of 4, nasty things may happen - at least, that poor person will lose time over an indentation issue that would have been very easy to avoid by sticking to the convention. So for me, the number one reason is to avoid bugs with consistency.

Reframing the question of which is better, tabs or spaces, one should ask which the advantages of tabs are; I've seen plenty posts praising tabs, but few compelling arguments for them; good editors like emacs, vi(m), kate, ... do proper indentation depending on the semantics of your code - even without tabs; the same editors can easily be configured to unindent on backspace etc.

Some people have very strong preferences when it comes to their freedom in deciding the look/ layout of code; others value consistency over this freedom. Python drastically reduces this freedom by dictating that indentation is used for blocks etc. This may be seen as a bug or a feature, but it sort of comes with choosing Python. Personally, I like this consistency - when starting to code on a new project, at least the layout is close to what I'm used to, so it's fairly easy to read. Almost always.

Using spaces for indentation allows "layout tricks" that may facilitate to comprehend code; some examples of these are listed in PEP8; eg.

foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# the same for lists
a_long_list = [1,
               2,
               # ...
               79]

# or dictionaries
a_dict = {"a_key": "a_value",
          "another_key": "another_value"}

Of course, the above can also be written nicely as

foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

# the same for lists
a_long_list = [
    1,
    2,
    # ...
    79]

# or dictionaries
a_dict = {
    "a_key": "a_value",
    "another_key": "another_value"}

However, the latter takes more lines of code and less lines are sometimes argued to be better (b/c you get more on a single screen). But if you like alignment, spaces (preferably assisted by a good editor) give you, in a sense, more freedom in Python than tabs. [Well, I guess some editors allow you to do the same w/ tabs ;) - but with spaces, all of them do...]

Coming back to the same argument that everybody else makes - PEP 8 dictates (ok, strongly recommends) spaces. If coming to a project that uses tabs only, of course, you have little choice. But because of the establishment of the PEP 8 conventions, almost all Python programmers are used to this style. This makes it sooooo much easier to find a consensus on a style that is accepted by most programmers... and having individuals agree on style might be very hard otherwise.

Tools that help enforcing style are usually aware of PEP 8 without extra effort. That's not a great reason, but it's just nice to have things work ~out of the box.

100

2013]. Я цитирую:

The most popular way of indenting Python is with spaces only.

Какая еще основная причина вам нужна?

Иными словами, рассмотрим также сферу применения ПКП, как указано в самом первом абзаце:

This document gives coding conventions for the Python code comprising the standard library in the main Python distribution.

Намерение состоит в том, чтобы сделатьall code that goes in the official python distribution последовательно отформатированный (я надеюсь, что мы можем согласиться, что это универсально хорошо) & # x2122;).

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

Гвидо был тем, кто выбрал. Ему даже не нужно было объяснять причину, но он все же ссылался на эмпирические данные.

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

Но, если я могу дать вам один совет: не смешивайте & em ;-) [ed: Смешивание табуляции и пробелов больше не вариант.]

@dorkitude: а) никто не идеален. б) исторические причины.
Итак, почему же так много программистов решили использовать пробелы до PEP-8? Это то, что я действительно хочу знать. Преимущества вкладок кажутся мне очевидными, но не пробелами.
Согласовано. Согласованность важнее, чем табуляция против X пробелов и Y пробелов.
меня удивляет ... почему в стандартной библиотеке так много имен методов mixedCase?
0

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

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

я недавно нашел причину использовать пробелы: при разработке на моем интернет-планшете Nokia N900 у меня теперь была клавиатура без клавиши табуляции. Это заставило меня либо копировать и вставлять вкладки, либо переписывать код с пробелами. Я столкнулся с той же проблемой с другими телефонами. Конечно, это не стандартное использование Python, но кое-что, что нужно иметь в виду.

3

JWZ говорит это лучше всего:

When [people are] reading code, and when they're done writing new code, they care about how many screen columns by which the code tends to indent when a new scope (or sexpr, or whatever) opens...

...My opinion is that the best way to solve the technical issues is to mandate that the ASCII #9 TAB character never appear in disk files: program your editor to expand TABs to an appropriate number of spaces before writing the lines to disk...

...This assumes that you never use tabs in places where they are actually significant, like in string or character constants, but I never do that: when it matters that it is a tab, I always use '\t' instead.

У вас все еще есть проблема смешанных вкладок и пробелов, а также одного автора, использующего 1 столбец на вкладку и делающего отступы 4+ раза, что выглядело бы безумно в текстовом редакторе, отображающем каждый символ вкладки в виде 4 столбцов. Вкладки для отступа имеют смысл в текстовом редакторе с переменной шириной, например, в текстовом редакторе, использующем пропорционально расположенные шрифты. Не так много с текстовым редактором с фиксированной шириной.
Я не вижу, как он мог бы это понять.
Нет, я имел в виду, что текстовый редактор должен иметь возможность разбирать грамматику языка иunderstand когда происходит табуляция, чтобы вкладки могли использоваться только как средство форматирования, и не было бы необходимости использовать пробелы для отступа. & Quot; вкладка & Quot; необязательно иметь фиксированную ширину, и я нахожу в целом позорным то, что при современных методах (например, машинном обучении) форматирование все еще является проблемой для программистов. Все должно быть автоматизировано и должно быть автоматизировано и прозрачно.
Я бы сделал наоборот: у вкладок есть семантическое значение для отступа, поэтому более чувствительно хранить вкладки и отображать пробелы. Пользователь может выбрать стиль форматирования, и редактор будет соответственно расширять вкладки.
1

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

Тем не менее, Python также придерживается строгой философии, согласно которой есть только один способ сделать что-то, поэтому должна быть официальная рекомендация для одного способа сделать отступ.

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

И поскольку каждый редактор также может выбрать свою цветовую схему, как вы думаете, должны ли они также указывать, какую цветовую схему использовать?
Я согласен с dennmat: если я визуально предпочитаю 2 пробела, а Гвидо визуально предпочитает 4 пробела, то логичным выбором будет использование отступа табуляции.
Да, но разве это несоответствие не имеет больше смысла? Потому что это просто вопрос визуальных предпочтений. Если я предпочитаю более крупный & quot; выглядящий & quot; отступ в моем редакторе. Я могу установить для моих вкладок 8 пробелов, если я предпочитаю меньше, я могу установить их на 2. Таким образом, код, фактически не меняя форматирование, лучше подходит для человека, который его наблюдает.
78

Я использую только вкладки. Я очень хорошо знаю, почему.

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

Я действительно не понимаю, почему все дискриминируют использование вкладок. Это очень похоже на то, как пожилые люди дискриминируют молодых людей за выбор более новой более эффективной технологии и жалуются, что импульсный набор работает наevery phoneНе только на этих новых модных. «Тоновый набор не работает на каждом телефоне, поэтому он неправильный».

Ваш редактор не может правильно обрабатывать вкладки? Ну, возьмиmodern редактор. Может быть, это чертово время, мы сейчас в 21 веке, и время, когда редактор был высокотехнологичным сложным программным обеспечением, давно прошло. Теперь у нас есть тонны и тонны редакторов, и все они прекрасно поддерживают вкладки. Кроме того, вы можете определить, какой должна быть вкладка, что нельзя делать с пробелами. Не видите вкладки? Что это за аргумент? Ну, вы также не можете видеть пробелы!

Могу ли я быть настолько смелым, чтобы предложить лучший редактор? Один из тех высокотехнологичных, которые были выпущены около 10 лет назад, чтоdisplay invisible characters? (сарказм выключен)

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

Смешение табуляции и пробелов - это аргументы «нет-нет» и «нет». Это беспорядок и никогда не может работать.

Вопрос в том"Why does Python pep-8 strongly recommend spaces over tabs for indentation?", В этом ответе ничего не говорится о PEP8. ||| Вместо того, чтобы пытаться ответить на вопрос ... этот ответ мне кажется огромным снисходительнымprimarily opinion кусок. Есть 276 слов, используемых для обозначения «табуляция лучше, чем пробел, и вот почему ...».
Чтобы добавить к этому, взгляните на свою клавиатуру, символ клавиши TAB четко отображает отступ - это цель клавиши с отступом, а не ПРОБЕЛ. PEP8 рекомендует использовать пробелы, это ошибка ИМХО, но это всего лишь рекомендация -en.wikipedia.org/wiki/Tab_character#Tab_characters
Фактическая проблема с вкладками заключается в том, что вы не можете получить точную подстановку к символу, рекомендованную тем же PEP8 под комментарием & quot; # Выровненный с открывающим разделителем. Это единственная причина, по которой предпочтение отдано пробелам: чтобы получить правильный отступ!
@ZinghamNobody can use tabs exclusively: tabs and spaces are always used in combination and this leads to inconsistency.  Я и тысячи других использую их довольно последовательно каждый день. Вкладки для отступа, пробелы для выравнивания. Какую часть этой концепции вам так трудно понять, и почему вы убеждены, что ее невозможно применять последовательно?
Согласен с этим постом целиком. Использование пробелов предназначено для дураков, которым нравится получать ошибки из-за ошибок отступа в 1 пробел. Если ваш отступ был отклонен на 1 вкладку, я гарантирую, что вы заметите это.
-4

Джим и Томас Воутерс в комментариях.

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

Я согласен с Джимом в этом - вкладки НЕ являются злом сами по себе. Но есть проблема...

С пробелами я могу контролировать, как"MY OWN CODE"  выглядит в каждом редакторе в мире. Если я использую 4 пробела, то независимо от того, в каком редакторе вы открываете мой код, он будет иметь одинаковое расстояние от левого поля. С вкладками я в зависимости от настройки ширины вкладок для редактора - даже для МОЕГО СОБСТВЕННОГО КОДА. И мне это не нравится.

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

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

Редакторы - не единственные инструменты для просмотра кода. Есть также diff, tracebacks, Github и другие веб-страницы, и так далее, все они выберут некоторую ширину вкладки вне вашего контроля (вероятно, 8).
Я понимаю вашу точку зрения. Вы действительно контролируете, как все видят ваш код (в отношении отступов). Следующим шагом будет контроль типа шрифта и цвета, которые все будут использовать для просмотра вашего кода. После этого вы готовы доминировать над самим миром, а не только за редакторы кода!
@zigg Это абсолютно не имеет отношения к аргументу, поскольку он (она?) конкретно говорит оhis/her own code (эта информация выделена жирным шрифтом, курсивом и прописными буквами). Нигде к обсуждению делиться кодом не актуально.
Вы пользуетесь настройкой ширины табуляции для редактора & # x201D ;? Если ваш редактор не позволяет установить желаемую ширину вкладки, возможно, вы используете notepad.exe
@ user137369 Я полагаю, никогда не передавал код кому-либо еще?
7

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

Примечания к ПКП-8

ПКП-8 говорит'Use 4 spaces per indentation level.'
Понятно, что это стандартная рекомендация.

'For really old code that you don't want to mess up, you can continue to use 8-space tabs.'
Понятно, что есть НЕКОТОРЫЕ обстоятельства, когда можно использовать вкладки.

'Never mix tabs and spaces.'
Это явный запрет на смешивание - я думаю, что мы все согласны с этим. Python может обнаружить это и часто задыхается. Использование аргумента -tt делает это явной ошибкой.

'The most popular way of indenting Python is with spaces only. The second-most popular way is with tabs only.'
Это ясно заявляет, что оба используются. Просто чтобы быть ультрачистым: вы никогда не должны смешивать пробелы и табуляции в одном файле.

'For new projects, spaces-only are strongly recommended over tabs.'
Это четкая и сильная рекомендация, но не запрещение вкладок.

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

Я думал, что я хотел бы поработать с пробелами. В моем редакторе я настроил тип файла для использования исключительно пробелов, поэтому он вставляет 4 пробела, если я нажимаю клавишу Tab. Если я нажимаю клавишу Tab слишком много раз, я должен удалить пробелы!Arrgh!  Удаляет в четыре раза больше вкладок! Мой редактор не может сказать, что я использую 4 пробела для отступов (хотя редактор AN мог бы сделать это) и, очевидно, настаивает на удалении пробелов по одному.

Можно ли сказать, что Python должен рассматривать табуляцию как n пробелов при чтении отступов? Если бы мы могли согласовать 4 пробела для отступа и 4 пробела для табуляции и позволить Python принять это, то проблем не было бы.
Мы должны найти беспроигрышные решения проблем.

Я использую TextPad quamrana
Вы правы - я не вижу опцию dedent на backspace, но вы, вероятно, можете справиться с ней, используя shift-tab или уменьшить отступ (ctrl-shift-i по умолчанию).
Я просто пытаюсь использовать PyScripter, который, кажется, загружается лучше при использовании пробелов, когда вы нажимаете клавишу Tab, и удаляет их через 4, когда вы нажимаете клавишу Backspace. quamrana
"I have to delete the spaces! Arrgh! Four times as many deletes as tabs!" - Это единственная причина, по которой я использую вкладки для всего, и почему я считаю людей, которые используют пробелы, безумными. :) У меня никогда не было проблем, за исключением случаев, когда я вставляю что-то из Интернета, которое использует пробелы. Тогда простой поиск-замена исправляет это.
Какой редактор вы используете? У большинства из них, которые я использовал, есть опция dedent in backspace (например, emacs ведет себя таким образом), независимо от реализации отступа.
11

что использование вкладок смущает другой аспект PEP 8:

Limit all lines to a maximum of 79 characters.

Предположим, гипотетически, что вы используете ширину табуляции 2, а я ширину табуляции 8. Вы пишете весь свой код так, что ваши самые длинные строки достигают 79 символов, а затем я начинаю работать над вашим файлом. Теперь у меня сложный для чтения код, потому что (как утверждает PEP):

The default wrapping in most tools disrupts the visual structure of the code

Если мы все используем 4 пробела, это ВСЕГДА одинаково. Любой, чей редактор может поддерживать ширину 80 символов, может с комфортом прочитать код.Note: The 80 character limit is a holy war in and of itself, so let's not start that here.

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

Похожие вопросы