Python табуляция (отступы)
Одна из особенностей Python — для оформления блоков кода вместо привычных фигурных скобок, как в C, C ++, Java или операторных скобок begin … end как в Pascal, используются отступы (или табуляция).
Подробнее о том, какие есть правила расстановки отступов — рассмотрим далее.
Почему табуляция в Питоне так важна?
Что такое отступ? Говоря простыми словами, это просто добавление пробела перед определенным оператором.
Отступы — важная концепция языка Питон, так как без правильного их оформления в итоге программист получит ошибку типа IndentationError , код при этом не будет скомпилирован.
Многим программистам жесткое соблюдение отступов может показаться избыточной мерой. Однако именно из-за строго соблюдения правил форматирования, код на Python — чистый, понятный и аккуратный. Отсюда следующие плюсы :
- Не нужно проверять, не потерялась ли лишняя скобка;
- Читать такой код удобнее (по » Философии Python » — читаемость имеет значение);
- Легче работать со сторонними библиотеками;
- Код вашего коллеги будет максимально похож на ваш код.
♂️ Чтобы понять, насколько это важно, можно представить ситуацию, когда в книге удалить все номера страниц, в результате чего нельзя будет понять, где продолжать чтение. Без использования indent-отступа интерпретатор Python не сможет определить, какой оператор необходимо выполнять следующим, что относится к разным блокам кода. В результате и возникает исключение типа IndentationError .
Отступы в языке Python — это способ указать интерпретатору, что оператор (или целая их группа) — это определенный block-комбинация команд для выполнения задачи.
В большинстве других языков, таких как семейство C, Java и прочих для оформления блоков используются фигурные скобки, в Питоне — отступы, для создания которых обычно используются пробелы. Все команды, отделенные от начала строки одним и тем же расстоянием, принадлежат к одному и тому же блоку. Если в нем выделяется еще один блок — используется еще один отступ вправо, и так далее. Рассмотрим это на примере:
def my_small_function(): # [0 пробелов] определение функции со знаком «:» в конце if a > b: # [4 пробела] начало блока условия, располагается внутри функции return a # [8 пробелов] часть блока if else: # [4 пробела] продолжение блока условия, на том же уровне, что и if return b # [8 пробелов] часть блока else print(my_small_function()) # [0 пробелов] вызов функции вне ее блока
По умолчанию в Python используется 4 пробела в качестве отступа
Однако программист может использовать и другое их количество, но не менее одного.
Что нам говорит PEP8?
Для каждого уровня отступов необходимо использовать по 4 пробела.
Строки большой длины должны вертикально выравнивать внутренние элементы, для этого используется неявная линия в скобках или с применением висячего отступа. Во втором случае следует помнить: на первой линии не должны располагаться аргументы, остальные строки располагаются так, чтобы быть продолжением неявной линии.
Примеры кода
Правильное оформление
# Выравнивание выполнено по открывающей скобке foo = name_of_function(one, two, three, four) # Дополнительные отступы используются для выделения блока от остальных def name_of_function( one, two, three, four): print(one)
Расположение закрывающих скобок в конструкциях с многими строками под началом первой строки:
my_list = [ one, two, three, four, five, six, ] result = some_arguments( ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, )
Ошибочное оформление
# Без вертикального выравнивания аргументы не должны располагаться на первой линии foo = name_of_function(one, two, three, four) # Используется больше отступов для выделения блока от остальных def name_of_function( one, two, three, four): print(one)
Выборочное оформление
# Использование небольших отступов foo = name_of_function( one, two, three, four)
В многострочных конструкциях закрывающие скобки можно устанавливать на отдельной строке под первым символом (не пробелом) последнего пункта:
some_list = [ one, two, three, four, five, six, ] res = some_arguments( ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, )
Табуляция или пробелы — что использовать? ♂️
Согласно официальной документации, самым предпочтительным способом оформления отступов является использование пробелов, обычно 4
Табуляция может использоваться в случае поддержки готового кода, где все отступы оформлены именно таким способом.
В Python 3 версии запрещено оформлять отступы с использованием табуляции и пробелов, только какой-то один способ. Во второй версии интерпретатор пытается преобразовывать табуляцию в пробелы. Так, при вызове интерпретатора в командной строке с использованием параметра -t появляется предупреждение о наличии смешанного стиля оформления отступов. Если же запуск выполнен с параметром -tt, в этих местах кода будут ошибки. Так что рекомендуется использовать вызова интерпретатора именно с этими параметрами.
Настройка IDE для работы с отступами
Чтобы при написании кода не задумываться о правильной расстановке пробелов для отступов, в редакторах кода и IDE используется специальный функционал, самостоятельно распознающий место создания отдельных блоков, в результате чего пробелы расставляются автоматически.
Рассмотрим, как можно настроить или изменить такие параметры в самых популярных IDE, когда возникает такая необходимость.
PyCharm
В случае использования интегрированной среды разработки PyCharm для настройки оформления отступов необходимо последовательно перейти по таким пунктам меню:
File → Settings → Editor → Code style → Python
Для настроек параметров есть 3 поля:
- Tab size — количество пробелов при нажатии клавиши Tab;
- Indent — количество пробелов для одного отступа;
- Continuation indent — количество пробелов для отступа, когда следующая строка продолжает предыдущую.
Еще одна полезная опция — отображение точек вместо каждого пробела, что особо удобно при поддержке чужого кода. В PyCharm для активации этой функции следует перейти File → Settings → Editor → General → Appearance → Show whitespaces , установив галочку напротив соответствующего пункта.
VSCode
Для настройки аналогичных функций в VSCode нужно нажать комбинацию клавиш ctrl + , или перейти по пунктам меню
File → Preferences → Settings
Далее для ускорения в строке поиска ввести tab и установить нужные значения для таких опций:
- editor: insert spaces — использовать ли пробелы вместо табуляции;
- editor: tab size — желаемое количество пробелов для одного отступа.
Ошибки при работе с отступами
При неправильном оформлении отступов интерпретатор Python будет сообщать об ошибках. Таких ошибок может быть несколько, рассмотрим основные.
expected an indented block
Данная ошибка может возникать в случае, когда после оглашения начала блока кода — def, if, while и некоторых других на следующей строке отсутствует отступ. Для ее исправления после начала блока должна быть хотя бы одна вложенная строка с отступом.
Возникает ошибка в том случае, когда перед началом строки есть отступ, но на предыдущей отсутствует оглашение начала блока кода, то есть, нет def, if, elif, else, for или while. Обычно такая ситуация возникает случайно, когда программист ставит слишком много пробелов в начале строки.
Indentationerror: expected an indented block
Ошибка возникает в том случае, когда после оглашения блока кода на следующей строке нет отступа или же сделанные отступы состоят из разного количества пробелов.
Таким образом, отступы в языке программирования Python, в отличие от многих других, играют такую же важную роль, как и служебные слова, так как именно они определяют создание блоков кода. Для каждого indent рекомендуется использовать 4 пробела, однако программист по своему желанию может установить и другое их количество, главное — одинаковое во всем проекте.
Строки и функция print в Python
Строка представляет собой простую последовательность символов. С ней можно работать разными способами. Любая последовательность символов, заключенная в кавычки, в Python считается строкой. Кавычки могут быть одинарные и двойные.
«Строка Python.»
‘Строка Python.’
Это позволяет использовать внутренние кавычки в строках. «Язык программирования ‘Python’ «. Рассмотрим операции со строками.
Содержание страницы: |
---|
1. Функция print() |
2. Табуляция и разрыв строк |
3. Изменение регистра символов в строках |
4. F-строки. Форматирование строк |
5. Удаление пропусков |
6. Комментарии |
1. Функция print() в Python .
Встроенная функция print() выводит свой аргумент в строке текста.
>>> print( ‘Hello world!’ )
Hello world!
>>> print( «Hello world!» )
Hello world
>>> print( «Hello», ‘world!’ )
Hello world
В каждом случае аргументом является строка Hello world! Кроме того, print() не выводит кавычки, в которые заключена строка. Строка может быть заключена как в одинарные так и в двойные кавычки. В третьем случае, функция print() , получила список аргументов «Hello» и ‘world’, разделенных запятыми. Каждый аргумент выводится, отделяясь от следующего пробелом. В итоге во всех трех случаях получается один и тот же результат.
2. Табуляция и разрыв строк в Python.
В программировании термином пропуск ( whitespace ) называются такие непечатаемые символы, как пробелы, табуляции и символы конца строки. Пропуски структурируют текст, чтобы пользователю было удобнее читать его.
В таблице приведены наиболее часто встречаемые комбинации символов.
Для добавления в текст табуляции используется комбинация символов \t . Разрыв строки добавляется с помощью комбинации символов \n .
>>> print(«Python»)
Python
>>> print(» \t Python»)
Python
>>> print(«Языки программирования: \n Python \n Java \n C»)
Языки программирования:
Python
Java
C
Табуляция и разрыв строк могут сочетаться в тексте. В следующем примере происходит вывод одного сообщения с разбиением на строки с отступами.
>>> print(«Языки программирования: \n\t Python \n\t Java \n\t C»)
Языки программирования:
Python
Java
C
3. Изменение регистра символов в строках в Python.
Одной из частых операций, выполняемых со строками — это изменение регистра символов. Например, у нас есть переменная name, в которой сохранена строка «Hello world!». Для преобразования символов к верхнему или нижнему регистру существует несколько методов.
>>> name = «Hello world!»
>>> print(name. title() )
Hello World!
>>> print(name. upper() )
HELLO WORLD!
>>> print(name. lower() )
hello world!
В первом случае за именем переменной в команде print() следует вызов метода title() . Метод — это действие, которое Python выполняет с данными. Точка после name приказывает Python применить метод title() к переменной name. За именем метода всегда следует пара круглых скобок () . Методам для выполнения их работы часто требуется дополнительные данные, и они указываются в скобках. В данный момент дополнительная информация не нужна, поэтому в скобках ничего нет. Метод title() преобразует первый символ каждого слова к верхнему регистру, остальные символы выводятся, как и были. Во втором случае используется метод upper() , в котором все символы преобразовываются к верхнему регистру. В третьем случае в методе lower() идет преобразование всех символов к нижнему регистру.
Метод lower() очень часто используется для хранения данных. Редко при вводе данных все пользователи вводят данные с точным соблюдением регистра. После ввода все данные преобразуются к нижнему регистру и уже затем выводится информация с использованием регистра, наиболее подходящего.
4. F-строки. Форматирование строк в Python.
Часто требуется использовать значения переменных внутри строки. Предположим, что у вас имя и фамилия хранятся в разных переменных и вы хотите их объединить для вывода полного имени.
Для того чтобы вставить значение переменных в строку, нужно поставить букву f непосредственно перед открывающейся кавычкой. Заключить имя или имена переменных в фигурные скобки <> .
Python заменить каждую переменную на ее значение при выводе строки.
>>> name = «Александр»
>>> surname = «Пушкин»
>>> full_name = f» »
>>> print(full_name)
Александр Пушкин
Буква f происходит от слова format, потому что Python форматирует строку, заменяя имена переменных в фигурных скобках на их значения. В итоге выводится строка имя и фамилия.
Если в переменной имя и фамилия записана с маленькой буквы, то на помощь придет метод title() . Так же с помощью f строк можно строить сообщения, которые затем сохраняются в переменной.
>>> name = «александр»
>>> surname = «пушкин»
>>> full_name = f» »
>>> print( f» Русский поэт ! » )
Русский поэт Александр Пушкин!
>>> message = f» Мой любимый поэт »
>>> print(message)
Мой любимый поэт Александр Пушкин
Важно: F-строки впервые появились в Python3.6. Если вы используете более раннею версию, используйте метод format. Что бы использовать метод format(), перечислите переменные в круглых скобках после format.
full_name = «<> <>«.format(name, surname)
5. Удаление пропусков в Python.
Для пользователя две строки ‘Python’ и ‘ Python ‘ внешне сильно не отличаются, но для программы это совершенно разные строки. Python видит дополнительные пропуски и считает их важными. Обращайте внимание на лишние пропуски, потому что часто в программах приходится сравнивать строки, чтобы проверить совпадения. Один из примеров — это проверка имен пользователей при регистрации или авторизации на сайте. Python позволяет удалять лишние пропуски, введенные пользователем.
метод | описание |
---|---|
rstrip() | удаляет пропуск у правого края |
lstrip() | удаляет пропуск у правого края |
strip() | удаляет пропуски с обоих концов |
Python может искать лишние пропуски у правого и левого края строки, так же может удалить с обоих концов строки.
>>> language. rstrip ()
‘ python’
>>> language. lstrip ()
‘python ‘
>>> language. strip ()
‘python’
>>> language
‘ python ‘
Важно: Python не удаляет навсегда эти пропуски в переменной. Чтобы исключить пропуск из строки, следует ее перезаписать.
>>> language = ‘ python ‘
>>> language
‘ python ‘
>>> language = language. strip ()
>>> language
‘python’
Сначала пропуски удаляются методом strip() и потом записываются в исходную переменную.
6. Комментарии в Python.
В Python признаком комментария является символ «решетка» ( # ). Интерпретатор Python игнорирует все символы, следующие в коде после # до конца строки.
>>> print(‘Hello Python’)
Hello Python
>>> # print(‘Hello Python’)
Основная задача комментария — объяснить, как работает ваш код и что он делает. В процессе работы над проектом вы понимаете, как работают все компоненты, но если вы вернетесь к этому проекту спустя месяц или годы, то придется заново разбираться. Так же при совместной разработке с другими программистами без комментариев вам не обойтись. Рекомендуется сразу писать комментарии в процессе разработки. Удалить комментарии намного проще, чем возвращаться и добавлять комментарии в программу.
Артём Санников
Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.
Главная › Языки программирования › Python › Работа со строками › Табуляции и разрывы строк в Python
Табуляции и разрывы строк в Python
В программировании термином пропуск (whitespace) — называются такие непечатаемые символы, как пробелы, табуляции или символы конца строки. Пропуски позволяют структурировать текст так, чтобы пользователю было удобно его читать.
Чтобы добавить табуляцию в текст необходимо добавить \t в начало строки:
print("\tPython")
Чтобы добавить разрыв строки в текст ,необходимо добавить \n в нужное место:
print("Python\nPHP\nC++\nJava")
Табуляции и разрывы строк могут сочетаться в тексте
print("\tPython\n\tPHP\n\tC++\n\tJava")
Записи по теме
- Функция center() в Python
- Функция startswith() и endswith() в Python
- Функция ord() и chr() в Python
- Функция ljust() и rjust() в Python
- Функция zfill() в Python
- Обращение по индексу в строке Python
- Функция replace() в Python
- Длина строки в Python
Как работает табуляция в python?
Но я удалил tab а код все равно мне пишет что он там есть
Я не понимаю почему так происходит.
Я буквально нажимаю только TAB и после Backspace и у меня получается такая чехарда
- Вопрос задан более трёх лет назад
- 7844 просмотра
3 комментария
Простой 3 комментария
Редактор может сам подставлять. Если все сильно похоже на мистику — проверь настройки.
or latym @orlatym Автор вопроса
Aleksandr Shpak, А как это исправить в Notepad++
or latym, удалить n++ и поставить vscode 😉
ps: а если серъёзно, то там в настройках есть
Решения вопроса 2
Программист
Он тебе написал что надо пользоваться или табами или пробелами, но не всем сразу.
Ответ написан более трёх лет назад
Нравится 3 3 комментария
or latym @orlatym Автор вопроса
Но вроде в коде нет смешения пробелов и табов. код был создан с помощью Pyside2
А кто мешает включить отображение пробелов и табов чтобы небыло «но вроде»,
вот тут сразу видно все табы и пробелы:
or latym @orlatym Автор вопроса
Александр, Спасибо теперь я понял что пробелы превращаются в tab когда я добовляю tab.
Сергей П @trapwalker Куратор тега Python
Программист, энтузиаст
Описанная вами ошибка происходит из-за смешивания в отступах табов и пробелов.
Иногда редактор не очень понятно показывает вам где у вас табуляция, а где группа пробелов. Этим грешит, например, mcedit.
рецепт прост: никогда не пользуйтесь табами в питоне. Вопрос, конечно, холиварный, но если у вас с табами проблемы, то вам они точно нигде не нужны. Это значит, что вы не можете адекватно настроить редактор и увидеть где табы и где пробелы.
Для вас будет правильным объяснить редактору, что для питоновских файлов следует всегда заменять таб на 4 пробела.
В питоне табуляция работает также как и везде. Просто операторные скобки в этом языке определяются отступами. Лично мне это решение очень нравится, хотя и порождает ряд неприятных проблем. Кстати запрет на смешивание отступов — это не проблема. Их смешивать — это плохой тон во всех языках, в том числе и yaml и где угодно.
В питоне с такими операторными скобками проблемы с ограниченностью лямбда-функций, а ещё затруднительно писать однострочники для `py`.
Ответ написан более трёх лет назад
or latym @orlatym Автор вопроса
Я использую Notepad++
А код в котором у меня появилась проблема это код созданный модулем Pyside
Но вроде в нем нет смешения пробелов и табов.
Сергей П @trapwalker Куратор тега Python
Просто когда я добовляю tab и после удаляю его то код мне выдает ошибку
TabError: inconsistent use of tabs and spaces in indentation
Вот в этот момент вы и внесли смешение.
Настройте редактор так, чтобы он вместо табов вставлял 4 пробела и уберите табы из текста полностью. Проверить можно посмотрев на текст в шестнадцатеричном коде. Ну и смените реадактор уже на специализированный, если не можете с ним справиться. Есть, кстати, VisualStudio Code. Он бесплатен и довольно хорош.