为什么可以混合python缩进

时间:2013-01-11 11:07:03

标签: python indentation

我无法相信,但可以在python代码中混合制表符和空格:

if __name__ == '__main__':
    for a in range(3): # indented with 4 spaces
        print(a)       # indented with 4 spaces and one tab

这背后的原因是什么?

经过测试:

  • Python 3.3.0(CPython)
  • Python 2.7.3(CPython)

注意:stackoverflow似乎更改了带空格的标签!

2 个答案:

答案 0 :(得分:7)

这是关于Python缩进的众多神话之一。

Python实际上做的是查看行之间的相对缩进,而不是固定金额。

  • 当行之间的缩进增加时,它会将其视为块的开头并在堆栈上推送新的缩进级别。
  • 当缩进减少时,它会弹出缩进级别堆栈,直到找到匹配的级别,为每个弹出关闭一个块

只要您对块的范围内的每个级别保持一致,就不关心您是使用制表符,空格还是混合。

E.g。以下是有效文件(使用[]表示空格,[t]表示选项卡)

if True:
[ ][ ][ ][ ]print ("Four spaces")

if True:
[t]print ("Tab")
[t]if True:
[t][ ][ ][ ]print ("Tab and three spaces")

if True:
[ ][t][ ]print ("Mixture")

说了这么多 - 大多数理智的人坚持4个空格作为标准缩进,就像Benevolent Dictator intended it那样。

有关详情,请参阅Python: Myths about Indentation

答案 1 :(得分:2)

在python中引入了缩进,以确保每个编写的代码都有缩进,以便其他编码器可以正确读取它。

这并不意味着,编码员有他的自由。只要每个块保持其缩进,不同的块就可以具有不同的缩进。

例如,您可以拥有这样的工作文件,但不建议使用。

print "hello"
if True:
[TAB]print "a"
[TAB]i = 0
[TAB]if i == 0:
[TAB][SPACE][SPACE]print "b"
[TAB][SPACE][SPACE]j = i + 1
[TAB][SPACE][SPACE]if j == 1:
[TAB][SPACE][SPACE][TAB][TAB]print "c

更多阅读...... http://docs.python.org/release/2.5.1/ref/indentation.html