Python 2 позволяет смешивать пробелы и табуляции. так что вы можете иметь отступ вроде:
def foo():
[this is a tab it counts like eight spaces ]for each in range(5):
[this is a tab it counts like eight spaces ][space][space]print(each)
[space][space][space][space][space][space][space][space]print("Done!")
Строка 2 и строка 4 в Python 2 будут иметь одинаковый уровень отступа, но строка 2 будет делать это с вкладкой, а строка 4 будет делать это с пробелами. Напечатано на консоли, это будет выглядеть так:
def foo()
for each in range(5):
print(5)
print("Done!")
Но большинство редакторов позволяют вам установить, сколько пробелов должно быть на вкладке. Установите его на четыре, и вы получите это:
def foo()
for each in range(5):
print(5)
print("Done!")
Отступы все те же, но теперь они выглядят как отступы !
Поэтому Python 3 не допускает, чтобы один и тот же уровень отступа (т. Е. Строки 2 и 4) был изменен по-разному. Вы все еще можете смешивать табуляцию и пробелы, но не на одном уровне отступа. Это означает, что
def foo():
[this is a tab it counts like eight spaces ]for each in range(5):
[this is a tab it counts like eight spaces ][space][space]print(each)
[this is a tab it counts like eight spaces ]print("Done!")
будет работать, и так будет
def foo():
[this is a tab it counts like eight spaces ]for each in range(5):
[space][space][space][space][space][space][space][space][space][space]print(each)
[this is a tab it counts like eight spaces ]print("Done!")
Единственный способ сделать так, чтобы отступы выглядели странно, если вы установите для табуляции больше , чем восемь пробелов, и тогда отступ не только выглядит явно неправильным, вы ' Вы заметите, что вкладка будет иметь отступ в 12 пробелов (в приведенном ниже примере), поэтому вы понимаете, что вставляете вкладку, а не четыре пробела.
def foo():
for each in range(5):
print(each)
print("Done!")
Конечно, решение всех ваших проблем, как написано в комментариях, никогда не использовать вкладки. Я не уверен, почему в Python 3 по-прежнему разрешены вкладки, на самом деле нет веских причин для этого.