Python编程中的制表符与空格

时间:2020-03-06 14:35:03  来源:igfitidea点击:

在执行Python编程时,我总是使用制表符来缩进。但是后来我在SO上遇到一个问题,有人指出大多数Python程序员使用空格而不是制表符来最大程度地减少编辑器到编辑器的错误。

这有何不同?还有其他原因为什么人们会在Python中使用空格而不是制表符?还是根本不正确?

我应该立即切换编辑器以插入空格而不是制表符,还是像以前一样继续操作?

解决方案

因为PEP-8告诉我们使用空格。

最近,我遇到了一篇题为《 Python:缩进的神话》的文章,该文章讨论了此问题和相关问题。本文有充分的理由建议在编写Python代码时建议使用空格,但是肯定存在意见分歧的余地。

我相信大多数Python程序员仅使用空格是对的。

最" pythonic"的方式是每个缩进级别使用4个空格。但是,Python解释器将识别空格或者制表符。唯一要注意的是,我们绝不能混用空格和制表符,选择一个或者另一个。就是说,该规范建议使用空格,大多数开发人员都使用空格,因此除非我们有充分的理由不这样做,否则我会说空格。

当我们在文件中混合缩进时,会发生编辑器到编辑器错误。出现如下情况:代码块以4个空格缩进,然后一个缩进级别" in",以制表符缩进。现在,执行此操作(混合制表符和空格)的异教徒拥有它,因此他的制表符也是4个空格,因此他认为没有问题,Python也没有问题。

现在我们的受害者来了,他的选项卡设置为8个空格。现在我们的受害者认为代码看起来很糟糕,并通过删除一个缩进级别对其进行了修复,这现在使代码看起来仍然是2个缩进级别,但实际上是一个缩进级别。此时,所有的地狱都变得松散了。

这里的教训是,永远不要混用制表符和空格。如果我们坚持这一点,那么很容易将代码重新缩进空格或者制表符中,而无论我们使用的是哪种形式。确保不混用制表符和空格的最佳方法是始终将python-tt一起运行,当混用制表符和空格时会产生错误。

至于制表符和空格,我个人使用制表符,因此缩进与外观是分开的,当使用制表符缩进时,更改代码的外观比使用空格缩进要容易得多。我知道这与99%的Python程序员的做法背道而驰,但这是我个人的喜好,在任何情况下都可以轻松地将选项卡式文件转换为空格文件。相反的情况并不总是正确的,因为我们可能会意外地敲打字符串中的4个空格,等等。

我们可以混合制表符和空格...但是,制表符被认为与8个空格相同,因此除非我们将编辑器设置为将制表符视为8个空格,否则我们在混合它们时会遇到麻烦。

人们将在同一代码上使用不同的编辑器。这些编辑器将在屏幕上以不同的方式表示一个选项卡。如果我们正在使用一个将制表符表示为4个空格的编辑器,则如果将第一行缩进为"" \ t",第二行缩进为"" \ t \ t",则它们看起来就像在相同的缩进级别:8个空格。

Python解释器不了解编辑器,因此必须将选项卡解释为一定程度的缩进。实际上,它会将制表符解释为8个空格,因此缩进级别将与我们预期的有所不同:第一行12个空格,第二行16个空格。你被敬酒了。

使用允许我们在按TAB键时最多在制表位插入空格的编辑器,而不是插入\ t字符。然后忘记它。

我使用两个空格缩进和一个编辑器(kwrite),当我按下Tab键时,该编辑器会插入空格而不是Tab。

我在使用空格而不是制表符时遇到的唯一不便是,我们无法轻松删除缩进级别。我们必须删除四个空格,而不仅仅是一个标签。

厌倦了在缩进错字之后进行追逐(8个空格?否,7 oop 9 ...),我将源切换为"仅制表符"。

1个制表符== 1个缩进级别,句​​号

关键是:如果要将缩进显示为4、8或者pi / 12个字符宽度,只需在文本编辑器中更改设置,不要弄乱代码。

(个人而言,我使用4个字符宽度的制表符...,但有些人更喜欢3或者8个空格,甚至使用可变宽度字体。)

我在空格上使用制表符的主要原因是退格键。如果我在一行上,并且想退格删除那一行上的缩进,如果是空格,我必须按4x退格;相反,如果它是选项卡,则只需要打一次即可。

我将继续使用制表符,因为如前所述,从制表符转换为空格更容易,但并非如此。

我在想我想写一个简单的程序,将带有空格的代码转换为带有制表符的代码,因为我讨厌讨厌的空格。他们把我撞到了墙上!

哦!而且,当方向键处于空白位置时,使用箭头键向左和向右导航总是很痛苦。

更新:Sublime Text 3现在使用退格键删除完整的软​​选项卡。但是,箭头键导航仍然很乏味。

更新:看到一些很酷的GIF动画,这些动画说明了我的观点,更多的内容在Tabs vs. Spaces,We Again Meet

使用显示制表符的编辑器(就此而言,所有空格)。我们正在编程,而不是撰写文章。

我使用标签。选项卡(如果可以看到它们)中没有一个空格错误的空间。问题在于人们使用不同的编辑器,而世界上唯一的共同点是:tab == indent,如上所述。将Tab键设置为错误的空格数会有些麻烦,或者手动将其弄乱了。 TAB并使用真实的编辑器。 (这不仅与PEP相反,而且也与C / C ++和其他与空格无关的语言有关)。

/从soapbox下台