为什么可以混合python缩进

ais*_*baa 2 python indentation

我简直不敢相信,但可以在python代码中混合制表符和空格:

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

这背后的原因是什么?

测试:

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

注意:似乎stackoverflow用空格更改选项卡!

Ros*_*Nab 7

这是关于Python缩进的许多神话之一.

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

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

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

例如,以下是有效文件(使用[]表示空格,[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")
Run Code Online (Sandbox Code Playgroud)

说了这么多 - 大多数理智的人坚持4个空格作为标准缩进,这是仁慈的独裁者所期望的方式.

有关详细信息,请参阅Python:关于缩进的神话.