Когда я впервые изучал Python, меня немного оттолкнула мысль о значительном пустом пространстве, поскольку большинство языков для его использования негибкие. Тем не менее, я был впечатлен способностью Python понимать различные стили отступов. При рассмотрении того, какой стиль использовать для нового проекта, я думаю, что важно помнить о двух вещах.
- Во-первых, важно понять, как Python интерпретирует отступы. Брайан Оукли упомянул о возможности появления отдельных ошибок при использовании вкладок, но на самом деле это невозможно при настройках интерпретатора по умолчанию. Это можно лучше объяснить в Learning Python , из O'Reilly Media .
По сути, есть переменная (которую можно изменить, добавив комментарий вверху исходного файла # tab-width:), которая определяет ширину вкладки. Когда Python встречает вкладку, он увеличивает расстояние отступа до следующего кратного ширины табуляции . Таким образом, если в левой части файла вводится пробел, за которым следует табуляция, следующая кратность ширины табуляции равна 8. Если вводится табуляция сама по себе, происходит то же самое.
Таким образом, при правильной настройке редактора безопасно использовать вкладки и даже смешивать вкладки и пробелы. До тех пор, пока вы устанавливаете вкладку вашего редактора на ширину табуляции, равную объявлению ширины табуляции Python (или 8, если она отсутствует). Как правило, плохая идея использовать редактор с шириной табуляции, отличной от 8 пробелов, если вы не укажете ширину табуляции в файле.
- Во-вторых, большая часть синтаксического дизайна Python состоит в том, чтобы поощрять читаемость кода и согласованный стиль между программистами в одном проекте. Тем не менее, для любого конкретного проекта возникает вопрос, что сделает код наиболее читаемым для людей, работающих над проектом . Конечно, это хорошая идея, чтобы сохранить согласованный стиль отступов, но в зависимости от платформы и редактора, используемого проектом, для разных проектов может иметь смысл различный стиль. Если нет веских причин для несоблюдения PEP 8 , тогда имеет смысл это сделать, поскольку оно будет соответствовать ожиданиям людей.
Я сталкивался с проектами, которые успешно используют сочетание вкладок и пробелов. В основном, пробелы используются для отступа небольших секций, где тот факт, что он находится в секции с отступом, относительно не важен; в то время как вкладки используются для привлечения внимания читателя к большой структурной особенности. Например, классы начинаются с вкладки, в которой простые условные проверки внутри функции используют два пробела.
Вкладки также полезны при работе с большими блоками текста с отступом на несколько уровней. Когда вы пропускаете 3-4 уровня отступа, гораздо проще выстроить правильную вкладку, чем выровнять нужное количество пробелов. Если в проекте не используется рекомендуемый стиль PEP 8, вероятно, лучше всего написать руководство по стилю в файле где-нибудь, чтобы шаблон отступа оставался непротиворечивым, а другие могли явно прочитать, как настроить свой редактор для соответствия.
Кроме того, в Python 2.x есть опция -t
для выдачи предупреждений о смешанных символах табуляции и пробелах и -tt
для выдачи ошибки. Это относится только к смешанным символам табуляции и пробелам внутри одной области видимости. Python 3 предполагает -tt
, и, насколько я обнаружил, нет возможности отключить эту проверку.