Что такое табуляция в python
Перейти к содержимому

Что такое табуляция в python

  • автор:

Как работает табуляция в Python?

5f95735158d20206377546.jpeg

Здравствуйте!
Я начал изучать пайтон, это мой первый язык программирования.
Вопрос в том что я не понимаю как работает табуляция и вообще отступы.
Я понимаю что допустим TAB это 4 пробела, 4 пробела это TAB, вроде их в одно коде совмещать нельзя.
А вот по какому принципу эти все отступы нужно соблюдать я не понимаю. То есть если я пишу просто код допустим который на картинке, там если я сделаю отступ в последнем print, то программа скажет что недопустимый отступ или что то подобное IndentationError: unexpected indent.
Объясните как работает эта табуляция в циклах и в общем главный смысл как она работает. Буду дико благодарен!

  • Вопрос задан более трёх лет назад
  • 550 просмотров

1 комментарий

Простой 1 комментарий

Чем правильно ставить отступы — табами или пробелами?

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

Зачем нужны отступы

С помощью отступов программисты форматируют код, чтобы он лучше выглядел и его было удобнее читать другим программистам. С ним легко показать вложенность элементов — что к чему относится и как всё связано между собой. Например, вот так выглядит неформатированный HTML-файл из статьи про контекстное меню:

Чем правильно ставить отступы — табами или пробелами?

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

А вот так выглядит тот же самый код, к которому мы добавили отступы разного уровня — сразу видна иерархия и порядок:

Чем правильно ставить отступы — табами или пробелами?

Ещё есть языки программирования, в которых отступы обязательны — сейчас это Python, а ещё были Fortran и COBOL. Например, эти два фрагмента кода на Python приведут к разным результатам, хотя отличаются только отступами:

# с отступами for i in range(10): i = i+1 print(i) k = i*2 print(k) # без отступов for i in range(10): i = i+1 print(i) k = i*2 print(k)

Что такое табы

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

Клавиша табуляции перешла на клавиатуру компьютера и в редакторах кода делает то же самое — перемещает курсор на несколько позиций правее.

Чем правильно ставить отступы — табами или пробелами?

На сколько именно позиций сдвигается курсор — зависит от настроек редактора. Чаще всего используются числа, кратные двум: 2, 4 или 8 позиций. Одна позиция равна одному пробелу, поэтому говорят, например, что в табе 8 пробелов.

Почему лучше табы

С табами всё просто: один таб — один отступ, первый уровень вложенности. Два таба — два отступа, второй уровень вложенности и так далее. Не нужно много раз нажимать на пробел, считать в уме, сколько раз ты уже нажал и сколько осталось.

А ещё всегда можно настроить размер табуляции — сколько пробелов будет занимать один таб. В редакторе кода VS Code это можно настроить внизу, на информационной панели:

Чем правильно ставить отступы — табами или пробелами?

Почему лучше пробелы

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

Какие бывают стили отступов

У разных программистов есть свои традиции отступов и форматирования кода. Вот самые известные из них.

Стиль Кернигана и Ритчи. Автора языка Си придерживались такого форматирования: отступ в 8 пробелов (или одна большая табуляция, открывающая скобка на открывающей строке, закрывающая — отдельно:

Стиль GNU. В большинстве проектов Linux и открытого ПО придерживаются отступов в 2 символа, причём скобки тоже отступаются:

Стиль Олмана, или стиль BSD. У этого подхода открывающая скобка находится на том же уровне, что и команда, к которой она относится, а операторы сдвинуты на определённое количество символов (2, 4 или 8). Отступ может быть любым, главное, чтобы он соблюдался во всей программе:

Так что правильно ставить — табы или пробелы?

Если вы пишете код один и для себя — ставьте, что нравится, это же ваш код.

Если вы работаете в команде или занимаетесь парным программированием — узнайте, как принято, и делайте так же. Например, если в компании принято ставить 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 позволяет удалять лишние пропуски, введенные пользователем.

Удаление пропусков в 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’)

Основная задача комментария — объяснить, как работает ваш код и что он делает. В процессе работы над проектом вы понимаете, как работают все компоненты, но если вы вернетесь к этому проекту спустя месяц или годы, то придется заново разбираться. Так же при совместной разработке с другими программистами без комментариев вам не обойтись. Рекомендуется сразу писать комментарии в процессе разработки. Удалить комментарии намного проще, чем возвращаться и добавлять комментарии в программу.

Как работает табуляция в python?

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

Я буквально нажимаю только TAB и после Backspace и у меня получается такая чехарда

  • Вопрос задан более трёх лет назад
  • 7921 просмотр

3 комментария

Простой 3 комментария

shpaker

Редактор может сам подставлять. Если все сильно похоже на мистику — проверь настройки.
or latym @orlatym Автор вопроса
Aleksandr Shpak, А как это исправить в Notepad++

shpaker

or latym, удалить n++ и поставить vscode 😉
ps: а если серъёзно, то там в настройках есть
Решения вопроса 2

NeiroNx

Программист
Он тебе написал что надо пользоваться или табами или пробелами, но не всем сразу.
Ответ написан более трёх лет назад
Нравится 3 3 комментария
or latym @orlatym Автор вопроса
Но вроде в коде нет смешения пробелов и табов. код был создан с помощью Pyside2

NeiroNx

5e3ec5e5c2ada502723700.png

А кто мешает включить отображение пробелов и табов чтобы небыло «но вроде»,
вот тут сразу видно все табы и пробелы:

or latym @orlatym Автор вопроса
Александр, Спасибо теперь я понял что пробелы превращаются в tab когда я добовляю tab.

trapwalker

Сергей П @trapwalker Куратор тега Python
Программист, энтузиаст

Описанная вами ошибка происходит из-за смешивания в отступах табов и пробелов.
Иногда редактор не очень понятно показывает вам где у вас табуляция, а где группа пробелов. Этим грешит, например, mcedit.
рецепт прост: никогда не пользуйтесь табами в питоне. Вопрос, конечно, холиварный, но если у вас с табами проблемы, то вам они точно нигде не нужны. Это значит, что вы не можете адекватно настроить редактор и увидеть где табы и где пробелы.
Для вас будет правильным объяснить редактору, что для питоновских файлов следует всегда заменять таб на 4 пробела.

В питоне табуляция работает также как и везде. Просто операторные скобки в этом языке определяются отступами. Лично мне это решение очень нравится, хотя и порождает ряд неприятных проблем. Кстати запрет на смешивание отступов — это не проблема. Их смешивать — это плохой тон во всех языках, в том числе и yaml и где угодно.
В питоне с такими операторными скобками проблемы с ограниченностью лямбда-функций, а ещё затруднительно писать однострочники для `py`.

Ответ написан более трёх лет назад
or latym @orlatym Автор вопроса

Я использую Notepad++
А код в котором у меня появилась проблема это код созданный модулем Pyside
Но вроде в нем нет смешения пробелов и табов.

trapwalker

Сергей П @trapwalker Куратор тега Python

Просто когда я добовляю tab и после удаляю его то код мне выдает ошибку
TabError: inconsistent use of tabs and spaces in indentation

Вот в этот момент вы и внесли смешение.
Настройте редактор так, чтобы он вместо табов вставлял 4 пробела и уберите табы из текста полностью. Проверить можно посмотрев на текст в шестнадцатеричном коде. Ну и смените реадактор уже на специализированный, если не можете с ним справиться. Есть, кстати, VisualStudio Code. Он бесплатен и довольно хорош.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *