python - 为什么可以混合python缩进

标签 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 似乎用空格更改了制表符!

最佳答案

这是关于 Python 缩进的众多误解之一。

Python 实际上所做的是查看行与行之间的相对缩进,而不是固定数量。

  • 当行与行之间的缩进增加时,它认为这是一个 block 的开始并将新的缩进级别压入堆栈。
  • 当缩进减少时,它弹出缩进级别堆栈,直到找到匹配级别,为每个弹出关闭一个 block

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

例如以下为有效文件(使用[ ]表示空格,[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了解更多。

关于python - 为什么可以混合python缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14276849/

相关文章:

python - 尽管设置了边界,但角色在 Python/PyGame 中移出屏幕

python - 在 Windows 7 x64 中的 PyPy3.5 v5.10 上使用 ensurepip 进行 pip 安装

c++ - Emacs C++ 模式缩进不正确?

java - 使用 Transformer 缩进 XML 文本

c - 从文件读取到字符数组,C

python - 类 python 中的 IndentationError

python - Python ndimage generic_filter 的条件逻辑

python - 无法在 Mac 上创建带有子进程的新控制台

python - 循环遍历列表然后在 python 中使用双循环的更有效方法

c++ - c++ 的正确缩进做法是什么?