为什么PythonPEP-8强烈建议缩进使用空格而不是制表符?

为什么PythonPEP-8强烈建议缩进使用空格而不是制表符?,python,indentation,Python,Indentation,我看到了堆栈溢出,建议在Python程序中只使用空格进行缩进。我能理解持续压痕的必要性,我也感受到了这种痛苦 是否存在首选空间的潜在原因?我本以为制表符更容易使用。制表符的问题是它们是不可见的,人们永远无法就制表符的宽度达成一致。当您混合使用制表符和空格,并在Python以外的位置设置tabstops(每8个空格使用一个tabstops)时,您将看到与Python不同的布局中的代码。因为布局决定了块,所以您将看到不同的逻辑。它会导致微妙的错误 如果您坚持不遵守PEP 8并使用制表符——或者更糟糕

我看到了堆栈溢出,建议在Python程序中只使用空格进行缩进。我能理解持续压痕的必要性,我也感受到了这种痛苦


是否存在首选空间的潜在原因?我本以为制表符更容易使用。

制表符的问题是它们是不可见的,人们永远无法就制表符的宽度达成一致。当您混合使用制表符和空格,并在Python以外的位置设置tabstops(每8个空格使用一个tabstops)时,您将看到与Python不同的布局中的代码。因为布局决定了块,所以您将看到不同的逻辑。它会导致微妙的错误


如果您坚持不遵守PEP 8并使用制表符——或者更糟糕的是,混合使用制表符和空格——至少要使用“-tt”参数运行python,这会导致不一致的缩进(有时是制表符,有时是相同缩进级别的空格)错误。此外,如果可能,请将编辑器设置为以不同方式显示选项卡。但实际上,最好的方法不是使用制表符,句号。

制表符的普遍问题是,它们可以在不同的环境中以不同的方式表示。

在给定的编辑器中,选项卡可能是8个空格,也可能是2个空格。
在某些编辑器中,您可以控制这一点,而在其他编辑器中则不能

选项卡的另一个问题是它们在打印输出中的表示方式。我相信大多数打印机将标签解释为8个空格


有了空间,这是毫无疑问的。所有内容都将按照作者的意图排列。

我所能说的空格优于制表符的最大优点是,许多程序员和项目在源代码中使用了一定数量的列,如果有人提交了一个更改,将其tabstop设置为2个空格,并且项目使用4个空格作为tabstop,那么对于其他人的编辑器窗口来说,长线将太长。我同意制表符更容易使用,但我认为空间更容易协作,这对于像Python这样的大型开源项目很重要。

因为Python依赖缩进来识别程序结构,所以需要一种明确的方法来识别标识。这就是选择空格或制表符的原因

然而,python也有一个很强的哲学,即只有一种方法来做事情,因此应该有一个关于一种方法的官方建议


空格和制表符都为编辑器处理缩进带来了独特的挑战。选项卡本身的处理在编辑器甚至用户设置中并不统一。由于空间是不可配置的,因此它们提出了更符合逻辑的选择,因为它们保证结果在任何地方都是一样的。

你可以吃蛋糕,吃蛋糕。将编辑器设置为自动将选项卡展开到空间中


(这将是
:在Vim中设置expandtab

空格的原因是选项卡是可选的。空格是标点符号中实际最小的公分母

每一个像样的文本编辑器都有一个“用空格替换制表符”,很多人都使用它。但并非总是如此

虽然一些文本编辑器可能会用一个选项卡替换一系列空格,但这种情况非常罕见


底线。空格是不会出错的。标签可能会出错。因此,不要使用制表符,以减少出错的风险。

答案就在政治公众人物(PEP)中给出了[ed:这篇文章已在中编辑掉]。我引述:

最流行的缩进Python的方法是只使用空格

你还需要什么其他潜在的原因

不那么直截了当地说:也要考虑第一段所述的PEP的范围:

本文档给出了Python代码的编码约定,该代码包含Python主发行版中的标准库

这样做的目的是使官方python发行版中的所有代码都具有一致的格式(我希望我们能一致认为这是一件好事)™).

由于单个程序员在空格和制表符之间的决定是a)真正的品味问题,b)很容易通过技术手段(编辑器、转换脚本等)处理,因此有一个明确的方法结束所有讨论:选择一个

圭多是一个选择。他甚至不必给出理由,但他还是参考了经验数据

出于所有其他目的,您可以将此政治公众人物作为建议,也可以忽略它——您的选择,或您的团队,或您的团队领导


但如果我可以给你一个建议的话:不要把它们混在一起;-)[ed:将制表符和空格混合在一起不再是一种选择。]

问题的答案是:PEP-8想提出一个建议,并决定,既然空格更受欢迎,它将强烈推荐空格而不是制表符


关于PEP-8的说明

PEP-8表示“每个缩进级别使用4个空格”。
很明显,这是标准建议

“对于您不想弄糟的非常旧的代码,您可以继续使用8个空格的制表符。”
很明显,在某些情况下可以使用选项卡

“切勿混合使用制表符和空格。”
这是对混合的明确禁止——我想我们都同意这一点。Python可以检测到这一点,并且经常阻塞。使用-tt参数会使这成为一个显式错误

最流行的缩进Python的方法是只使用空格。第二种最流行的方式是仅使用选项卡。“
这清楚地表明两者都被使用。非常清楚的一点是:您仍然不应该在同一个文件中混合空格和制表符

“对于新项目,强烈建议在选项卡上使用空格。”
这是一个明确的建议,也是一个强有力的建议,但不是禁止使用标签


我在PEP-8中找不到我自己问题的好答案。 我使用制表符,这是我在其他语言中使用过的。 Python接受源代码,并独占使用选项卡。T
def foo():
    x = some_function_with_lots_of_args(foo, bar, baz,
                                        xyzzy, blah)
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# the same for lists
a_long_list = [1,
               2,
               # ...
               79]

# or dictionaries
a_dict = {"a_key": "a_value",
          "another_key": "another_value"}
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

# the same for lists
a_long_list = [
    1,
    2,
    # ...
    79]

# or dictionaries
a_dict = {
    "a_key": "a_value",
    "another_key": "another_value"}