阻止缩进

Python 使用缩进来定义控件和循环结构。这有助于 Python 的可读性,但是,它需要程序员密切关注空白的使用。因此,编辑器错误校准可能导致代码以意想不到的方式运行。

Python 使用冒号(:)和缩进来显示代码块的开始和结束位置(如果你来自另一种语言,请不要将其与某种方式与三元运算符相关联 )。也就是说,Python 中的块,例如函数,循环,if 子句和其他构造,没有结束标识符。所有块都以冒号开头,然后在其下方包含缩进的行。

例如:

def my_function():    # This is a function definition. Note the colon (:)
    a = 2             # This line belongs to the function because it's indented
    return a          # This line also belongs to the same function
print(my_function())  # This line is OUTSIDE the function block

要么

if a > b:             # If block starts here
    print(a)          # This is part of the if block
else:                 # else must be at the same level as if
    print(b)          # This line is part of the else block

只包含一个单行语句的块可以放在同一行,但这种形式通常不被认为是好的样式:

if a > b: print(a)
else: print(b)  

试图与多条语句会更多地做到这一点工作:

if x > y: y = x
    print(y) # IndentationError: unexpected indent

if x > y: while y != z: y -= 1  # SyntaxError: invalid syntax

空块导致 IndentationError。如果你的块没有内容,请使用 pass(无效的命令):

def will_be_implemented_later():
    pass

空格与标签

简而言之: 始终使用 4 个空格进行缩进。

可以使用制表符,但 PEP 8 (Python 代码的样式指南)声明空格是首选。

Python 3.x >= 3.0

Python 3 不允许混合使用制表符和空格来缩进。在这种情况下会生成编译时错误:Inconsistent use of tabs and spaces in indentation 并且程序将不会运行。

Python 2.x <= 2.7

Python 2 允许在缩进中混合制表符和空格; 这是非常沮丧的。制表符将前一个缩进完成8 个空格倍数 。由于编辑器通常配置为将选项卡显示为 4 个空格的多个,因此这可能会导致细微的错误。

引用 PEP 8

当使用 -t 选项调用 Python 2 命令行解释器时,它会发出有关非法混合制表符和空格的代码的警告。使用 -tt 时,这些警告会出错。强烈推荐这些选项!

许多编辑器都有标签到空格配置。在配置编辑器时,应该区分制表 (’\ t’)和 Tab 键。

  • 选项卡字符应配置为显示 8 个空格,以匹配语言语义 - 至少在(偶然)混合缩进可能的情况下。编辑器还可以自动将制表符转换为空格。
  • 但是,配置编辑器可能会有所帮助,以便 Tab 按键将插入 4 个空格,而不是插入制表符。

使用选项卡和空格混合编写的 Python 源代码,或者使用非标准数量的缩进空间,可以使用 autopep8 使用 pep8 -conformant。 (大多数 Python 安装都有一个不太强大的替代方案: reindent.py