- Python табуляция (отступы)
- Почему табуляция в Питоне так важна?
- Что нам говорит PEP8?
- Примеры кода
- 👍 Правильное оформление
- 👎 Ошибочное оформление
- 😐 Выборочное оформление
- Табуляция или пробелы — что использовать? 🤷♂️
- Настройка IDE для работы с отступами
- PyCharm
- VSCode
- Ошибки при работе с отступами
- Indentation in Python (With Examples)
- What is Indentation in Python?
- Python Indentation Rules
- Benefits of Indentation in Python
- Disadvantages of Indentation in Python
- Indentation in Python for loop
- IndentationError Examples
- Summary
- What’s Next?
- References
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?
Строки большой длины должны вертикально выравнивать внутренние элементы, для этого используется неявная линия в скобках или с применением висячего отступа. Во втором случае следует помнить: на первой линии не должны располагаться аргументы, остальные строки располагаются так, чтобы быть продолжением неявной линии.
Примеры кода
👍 Правильное оформление
# Выравнивание выполнено по открывающей скобке 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)
😐 Выборочное оформление
В многострочных конструкциях закрывающие скобки можно устанавливать на отдельной строке под первым символом (не пробелом) последнего пункта:
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 пробела, однако программист по своему желанию может установить и другое их количество, главное — одинаковое во всем проекте.
Indentation in Python (With Examples)
Indentation in Python is used to create a group of statements that are executed as a block. Many popular languages such as C, and Java uses braces (< >) to define a block of code, and Python uses indentation.
To write bug-free, user-friendly and beautiful code, it is important to know many things about indentation, like its rules, its benefits, the error you get, etc. All of which we have covered in this tutorial. Let’s start with an introduction to indentation.
What is Indentation in Python?
Indentation in Python refers to the whitespaces at the start of the line to indicate a block of code. We can create an indentation using space or tabs. When writing Python code, we have to define a group of statements for functions and loops. This is done by properly indenting the statements for that block.
The leading whitespaces (space and tabs) at the start of a line are used to determine the indentation level of the line. We have to increase the indent level to group the statements for that code block. Similarly, reduce the indentation to close the grouping.
The four whitespaces or a single tab character at the beginning of a code line are used to create or increase the indentation level.
Let’s look at an example to understand the code indentation and grouping of statements.
def foo(): print("Hi") if True: print("true") else: print("false") print("Done")
Note: In Python programming languages the indentation in code can be done by using two spaces or four spaces (or any other number of spaces), you just have to be consistent, although 4 spaces for each level of indentation is the best practice.
Python Indentation Rules
Below are the rules that one should follow while using indentation:
- The first line of Python code can’t have an indentation, it will throw IndentationError.
- You should avoid mixing tabs and whitespaces to create an indentation. It’s because text editors in Non-Unix systems behave differently and mixing them can cause the wrong indentation.
- It is preferred to use whitespace than the tab character.
- The best practice is to use 4 whitespaces for the first indentation and then keep adding additional 4 whitespaces to increase the indentation.
Benefits of Indentation in Python
The proper use of indentation in a program provides many benefits, some of them are:
- Indentation is important to increase the readability of the code by clearly indicating the hierarchy (i.e. if statements belong to the same block or not).
- This avoids the need to use delimiters such as braces or brackets, which is mandatory in most programming languages like C, C++, Java, etc.
- Python indentation is consistent throughout the program, making it easier to debug.
- In most programming languages, indentation makes the structure of the code proper. Python uses it for grouping, making the code automatically beautiful.
- Python indentation rules are very simple. Most of the Python IDEs automatically indent the code for you, so it’s very easy to write the properly indented code.
Disadvantages of Indentation in Python
There are only a few disadvantages of indentation in code, let’s look at them:
- Since whitespaces are used for indentation, if the code is large and indentation is corrupted then it’s really tedious to fix it. It happens mostly by copying the code from online sources, Word documents, or PDF files.
- Most of the popular programming languages use braces for indentation, so anybody coming from a different programming world finds it hard at first to adjust to the idea of using whitespaces for indentation
Indentation in Python for loop
We have to increase the indentation in the for loop so that the code will be grouped together. Let’s look at an example of indentation in Python for loop.
def print_numbers(x, y): for i in range(x, y): print(i)
IndentationError Examples
Let’s look at some examples of the indentation error in Python.
>>> x = 10 File "", line 1 x = 10 ^ IndentationError: unexpected indent >>>
We can’t have an indentation in the first line of the code. That’s why the Python interpreter throws IndentationError.
if True: print("true") print("Hi") else: print("false")
The code lines inside the if block has different indentation level, hence the IndentationError.
if True: print("true") else: print("false") print("Done")
Here the last print statement has some indentation but there is no statement to attach it, hence the indentation error is thrown.
if True: print("true") else: print("false")
File "/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/indent.py", line 2 print("true") ^ IndentationError: expected an indented block
The print statements inside the if & else block must be indented.
Summary
Indentation refers to adding the relevant number of tabs and spaces at the beginning of lines of code to indicate a block of code in Python. Indentation in Python is very important to make the code readable, without indentation you find it hard to read or debug a program.
Indenting the Python code results in the habit of writing beautiful code all the time because it’s not a good-to-have feature but a must-have requirement of the code. To indicate a block of code in Python, you must indent each line of the block by the same whitespace otherwise you will get an indentation error.
Now you have enough knowledge to use indentation in Python, don’t forget to apply above mentioned rule, or else you will end up getting errors.