理解Python解释器-t(-tt)选项

zer*_*uno 4 python tabs indentation python-2.7

我试图找出-t和-tt选项的作用.

来自doc:

当源文件混合制表符和空格以进行缩进时,发出警告,使其依赖于以空格表示的制表符的价值.选项被给出两次(-tt)时发出错误.

我没有得到它,特别是粗体句,这是什么意思?标签是一个标签('\ t'),空格是一个空格(''),在ascii表中它们也有2个不同的代码.

我会举一个例子来更好地解释自己.我代码:

if True:
    print('hello') # here a tab that my editor represents with 4 spaces
    print('world') # here just used 4 spaces
Run Code Online (Sandbox Code Playgroud)

现在这个代码,我尝试过,在Python3和Python2中都不起作用,那么-t做什么呢?

你能给我一个澄清吗?

Mar*_*ers 9

当用作缩进时,制表符必须被解释为等效于多个空格.如何许多空间取决于你如何配置你的编辑器,以及有多少空间之前在同一行上的标签.这是因为制表符代表跳转到下一个tabstop.如果您使用了2个空格加上一个选项卡,则表示您已跳转到第8列,就像插入了6个空格一样.

另外,有些人将他们的tabstops设置为相当于4个空格,其他人将其设置为与8个空格相同.然后这些人也以不同的方式在缩进中使用制表符.您可以为一个缩进级别使用4个空格,然后使用8个空格处的制表符,然后使用制表符加4个空格等.或者您可以使用制表符表示所有缩进级别,将制表符大小设置为表示4个空格.

Python需要处理标签和空格的混合,然后希望你一直使用它; 例如,你没有先使用4个空格,然后用一个标签缩进你认为是相当于12个空格的缩进.当你不一致时,Python很容易弄错.

这些-t-tt选项通过对所有线路进行更严格和彻底的测试来指出您可能遇到的问题.

您可以轻松地在各种标签大小和混合标签和空格之间产生令人困惑的结果,这就是为什么Python样式指南(PEP 8)强烈建议您使用空格的原因:

空格是首选的缩进方法.

选项卡应仅用于与已使用选项卡缩进的代码保持一致.

在Python 3中,混合制表符和缩进空格现在是一个错误.

确切地说:Python首先假设您为选项卡使用了8个空格.请参阅缩进文档,它是Lexical Analysis规范的一部分:

首先,标签被替换(从左到右)一到八个空格,使得直到并包括替换的字符总数是八的倍数(这与Unix使用的规则相同).然后,第一个非空白字符前面的空格总数确定行的缩进.缩进不能使用反斜杠在多个物理行上分割; 直到第一个反斜杠的空格确定缩进.

Python 2还可以查找Emacs和VI风格的配置注释; 如果该标记者发现评论时tab-width:,:tabstop=,:ts=set tabsize=在里面,其次是数字,如:

# -*- tab-width: 4 -*- (emacs)
# :tabstop=4 (vi)
Run Code Online (Sandbox Code Playgroud)

或类似的变体,然后Python设置标签.此支持已从Python 3中删除.

如果然后混合使用可能不一致的标签和空格并使用-t,则该文件将<filename>: inconsistent use of tabs and spaces in indentation被写入sys.stderr一次.如果您使用-tt,则会引发TabError异常.