Python对制表符和空格进行缩进的解释

发布于 2021-01-29 19:06:04

我决定学习一点Python。第一部分介绍说它使用缩进来对语句进行分组。虽然最好的习惯显然是仅使用其中一种,但是如果我互换它们会发生什么呢?多少个空格将被视为等于一个制表符?如果将制表符和空格混合使用,还是根本无法工作?

关注者
0
被浏览
183
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    空格不等同于制表符。用制表符缩进的行与用1、2、4 或8个 空格缩进的行的缩进不同。

    通过反例证明( 错误或至多限制-tab!= 4个空格 ):

    x = 1
    if x == 1:
    ^Iprint "fff\n"
        print "yyy\n"
    

    ^I‘显示一个TAB。通过Python 2.5运行时,出现错误:

      File "xx.py", line 4
        print "yyy\n"
                    ^
    IndentationError: unindent does not match any outer indentation level
    

    因此表明,在Python 2.5中,制表符不等于空格(尤其是不等于4个空格)。


    糟糕-令人尴尬;我的反例证明表明制表符不等于4个空格。正如AlexMartelli在注释中指出的那样,在Python
    2中,制表符等效于8个空格,并且使用制表符和8个空格对示例进行调整表明确实如此。

    x = 1
    if x != 1:
    ^Iprint "x is not 1\n"
            print "y is unset\n"
    

    在Python 2中,此代码有效,什么也不打印。


    在Python 3,规则是稍有不同(如注意到由安蒂哈帕拉。比较:

    Python 2说:

    首先,将制表符替换(从左至右)一到八个空格,以使直到包括该替换在内的字符总数为八个的倍数(这与Unix所使用的规则相同)。然后,第一个非空白字符之前的空格总数将确定该行的缩进。缩进不能使用反斜线分割成多条物理线;直到第一个反斜杠的空格都会确定缩进。

    Python 3说:

    制表符被替换为(从左到右)一到八个空格,以使直到包括该替换在内的字符总数为八个的倍数(这与Unix所使用的规则相同)。然后,第一个非空白字符之前的空格总数将确定该行的缩进。缩进不能使用反斜线分割成多条物理线;直到第一个反斜杠的空格都会确定缩进。

    (除了开头词“ First”之外,这些都是相同的。)

    Python 3增加了一段:

    如果源文件以使得含义取决于制表符在空格中的值的方式混合制表符和空格,则缩进被视为不一致。在这种情况下,将引发TabError。

    这意味着TAB在Python 2中工作的vs 8空格示例将在Python 3中生成TabError。最好-在Python 3中是必要的-
    确保组成块中每行缩进的字符序列相同。
    PEP8说“在每个缩进级别使用4个空格”。(Google的编码标准说“使用2个空格”。)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看