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

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

Если ваша строка на самом деле является объектом unicode, вы нужно будет преобразовать его в строковый объект, закодированный в кодировке unicode, прежде чем записывать его в файл:

foo = u'Δ, Й, ק, ‎ م, ๗, あ, 叶, 葉, and 말.'
f = open('test', 'w')
f.write(foo.encode('utf8'))
f.close()

Когда вы снова прочтете этот файл, вы получите строку с кодировкой в ​​кодировке Юникода, которую вы можете декодировать к объекту unicode:

f = file('test', 'r')
print f.read().decode('utf8')
137
задан Peter Mortensen 8 October 2009 в 14:13
поделиться

11 ответов

Ответ был дан тут же в PEP [редактора: этот проход был вырезан в 2013]. Я заключаю в кавычки:

Самый популярный способ расположить Python с отступом с пробелами только.

В чем другой базовой причине Вы нуждаетесь?

Помещать его менее прямо: Рассмотрите также объем PEP, как указано в самом первом абзаце:

Этот документ дает конвенции кодирования для кода Python, включающего стандартную библиотеку в основном распределении Python.

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

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

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

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

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

104
ответ дан 23 November 2019 в 23:32
поделиться

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

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

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

-3
ответ дан 23 November 2019 в 23:32
поделиться

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

0
ответ дан 23 November 2019 в 23:32
поделиться

Вы можете иметь свой пирог и съесть его к. Установите своего редактора для расширения вкладок в пробелы автоматически.

(Который был бы :set expandtab в Vim.)

0
ответ дан 23 November 2019 в 23:32
поделиться

JWZ заявляет это лучше всего:

Когда [люди] чтение кода, и когда они сделаны, пишущий новый код, они заботятся о том, сколько экранных столбцов, которыми код имеет тенденцию делать отступ, когда новый объем (или sexpr, или безотносительно) открывается...

... Мое мнение - то, что лучший способ решить технические вопросы состоит в том, чтобы передать под мандат это, Символ табуляции ASCII № 9 никогда не появляется в дисковых файлах: программируйте своего редактора для расширения ВКЛАДОК до соответствующего количества пробелов прежде, чем записать строки в диск...

... Это предполагает, что Вы никогда не используете вкладки в местах, где они являются на самом деле значительными, как в строковых или символьных константах, но я никогда не делаю это: когда имеет значение, что это - вкладка, я всегда использую '\t' вместо этого.

2
ответ дан 23 November 2019 в 23:32
поделиться

Так как Python полагается на добавление отступа для распознавания структуры программы, ясный способ определить, что identation требуется. Это - причина выбрать или пробелы или вкладки.

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

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

1
ответ дан 23 November 2019 в 23:32
поделиться

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


Примечания по PEP-8

PEP-8 говорит 'Использование 4 пробелов на уровень отступа'.
Ее ясное, что это - стандартная рекомендация.

'Для действительно старого кода, который Вы не хотите портить, можно продолжить использовать вкладки с 8 пространствами'.
Его ясное, что существуют НЕКОТОРЫЕ обстоятельства, когда вкладки могут использоваться.

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

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

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


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

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

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

7
ответ дан 23 November 2019 в 23:32
поделиться

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

Каждый достойный текстовый редактор имеет "замену, вкладки с пробелами" и многими людьми используют это. Но не всегда.

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

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

29
ответ дан 23 November 2019 в 23:32
поделиться

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

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

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

  • Программисты видят источник по-другому. Это очень субъективно - ее или основное преимущество вкладок или причина избежать их, в зависимости от которой стороны Вы идете. Зато, разработчики могут просмотреть источник со своим предпочтительным добавлением отступа, таким образом, разработчик, предпочитающий отступ с 2 пространствами, может работать с разработчиком с 8 пространствами на том же источнике и все еще видеть его, как им нравится. Оборотная сторона - то, что существуют последствия к этому - некоторые люди как с 8 пространствами, потому что это дает очень видимую обратную связь, что они слишком глубоко вкладываются - они могут видеть код, в котором зарегистрировались с 2 индентерами постоянно обертывание в их редактора. Наличие каждого разработчика видит код, тот же путь приводит к большей непротиворечивости wrt длины строки и другие вопросы также.

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

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

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

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

Также стоящий чтения эта статья Jamie Zawinski по проблеме.

22
ответ дан 23 November 2019 в 23:32
поделиться

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

Если Вы настаиваете на том, чтобы игнорировать PEP 8 и использовать вкладки - или худшие, смесительные вкладки и пробелы - по крайней мере всегда запускаемый Python с '-tt' аргумент, который делает непоследовательное добавление отступа (иногда вкладка, иногда пространство для того же уровня отступа) ошибкой. Кроме того, если это возможно, устанавливает Вашего редактора для отображения вкладок по-другому. Но действительно, лучший подход не должен использовать вкладки, период.

25
ответ дан 23 November 2019 в 23:32
поделиться

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

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

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

41
ответ дан 23 November 2019 в 23:32
поделиться
Другие вопросы по тегам:

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