2

我不敢相信,但可以在 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 用空格更改了选项卡!

4

2 回答 2

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")

说了这么多——大多数理智的人坚持使用 4 个空格作为标准缩进,正如仁慈的独裁者所希望的那样。

有关更多信息,请参阅Python:关于缩进的神话。

于 2013-01-11T11:10:34.030 回答
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

于 2013-01-11T11:11:47.063 回答