Python:使用4个空格进行缩进。 为什么?

虽然编码python,我只使用2个空格缩进,确实PEP-8真的build议有4个空格,但历史上对我来说是不寻常的。

那么,谁能说服我使用4个空格而不是2个? 有什么优点和缺点?

PS最后,将所有现有代码库从2个空间转换为4个空间的简单方法是什么?


PPS PEP-8另外build议不要使用标签进行缩进。 在这里阅读


所以,总结一下:

优点:

  • 长度超过80根线时,要有更多的空间排列。
  • 可以从代码片段复制代码,它只是工作。

缺点:

  • 嵌套语句的层次更深,实际代码的空间更less。

谢谢。

其他人使用4个空格。 这是使用我遇到并接受的4个空格的唯一原因。 在我的心里,我仍然想要使用制表符(每个缩进1个缩进字符,有意义,没有?分开缩进其他空格。我不在乎的标签可以显示为不同的宽度,没有语法差异。可能会发生的一些评论不排队恐怖!)但我已经接受,因为整个python社区使用4个空格,我使用4个空格。 这样,我可以从他人写的代码片段中汇集代码,而且这一切都可行。

我喜欢四个空格字符很好地缩进一个函数的内部代码,因为def +一个空格会生成四个字符。

 def·foo(): ····pass 

我认为真正的问题是为什么空间而不是标签。

标签显然更好:

  • 几乎不可能有不一致的缩进 (我见过的代码通常有4个空格缩进,但是有些部分恰好是一个空格,通过简单的检查很难说是否有7或8个空格。将不会发生与选项卡,除非您将您的Tabstop设置为1空格)。
  • Tab是缩进的逻辑语义表示,它允许你(和任何其他的开发者)select显示你想要的许多“空格”(或者说列)而不会混淆别人的偏好。
  • 如果您碰巧只有“记事本”(或其他虚拟编辑器), 那么它的键击次数也会减less
  • 添加和删​​除标签是一个对称的操作。 大多数IDE可能会在按下Tab键时自动插入4个空格,但通常在按下退格键时,它们只会移除1个空格(仍然可以通过shift-tab访问un-indent操作,但这是两个组合键),或者使用鼠标单击在缩进中间删除一个字符。
  • 他们只需要1个字节而不是4个(乘以数千行,节省了几KB!:p)
  • 你们还有一件事要解决,因为如果你决定去寻找空间,那么讨论会再次开始select多less(尽pipe共识似乎在四个左右)。

空间的优点:

  • Guido喜欢他们。
  • 你不能在这里轻松地input一个标签,它转移焦点(虽然你可以粘贴一个)。

没有“更好”的缩进。 这是一个宗教圣战的话题。 四是很好,因为它足以使缩进清晰,但不是太多,你的整个屏幕大部分是空白,你必须水平滚动阅读一半的程序。

它也具有对“标签”的历史定义的“半选项”的好处。

除此之外,使用任何你喜欢的组。 这就像巧克力和香草。

一个简单的切换方法是使用一个具有tab和space-tab支持的编辑器。 将所有前导空格标签转换为标签,将标签大小设置为4,然后将前导标签转换回空格标签。

用python脚本也很容易做到。 只需计算所有前导空格,然后将相同的数量添加到行的开头,并将其写回。

PEP不是你的老板。 如果它已经一致2格缩进,没有理由改变所有的代码来符合它。 如果你真的认为这是至关重要的,你可以继续前进,但坦率地说,我不这样做。 阅读和写作最让你感到舒适,而且最好还是给你(和你的同事)提供什么样的约定。

任何像样的编辑器(emacs,vim)都会将这些废话全部抽象出来。 它可以与空格或制表符一样工作,也可以configuration为使用任意数量的空格(或任何数量的空格宽度作为制表符)。 它也可以在不需要太多麻烦的情况下在不同格式之间进行转换(请参阅:retab vim中的:retab命令)。

如果您尝试批量转换源格式,我build议您查看缩进实用程序。

这就是说,我无法拒绝回答其他问题…我的select一直是用于制表符,因为它绕过了整个问题,每个人都可以按照他们认为合适的宽度来查看源代码。 当你在编辑器中工作时,对于转换没有帮助,键入的内容也less得多。 至于2对4空间,这纯粹是美容。

还有一个原因是:当你有一些长行(超过80个符号),并且想把它分成2个时,你将只有1个空格来缩进,这有点令人困惑:

 if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \ and someotherstatementhere: # some code inside if block pass if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \ and someotherstatementhere: # some code inside if block pass 

如果您是源文件中的唯一编码人员,并且没有强制执行特定样式的编码标准,请使用您所熟悉的任何编码标准。 个人(并符合我们的编码标准),我使用硬标签,以便谁在查看代码可以使用自己的偏好。

要进行更改,只需将所有行间空格更改为两倍大。 有很多方法可以做到这一点; 在Vim文本编辑器中,我可以想到两点:第一:

 :%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2) 

这是一个简单的正则expression式,它在行的开始处查找一对或多对空格,并将其replace为find的空格的两倍。 可以通过打开vim来扩展它来完成所有文件:

 vim *.py 

(或同等学历),其次是(未经testing):

 :argdo %s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)/ | w 

或者:

 " Switch to hard tabs: :set noexpandtab " Set the tab stop to the current setting :set tabstop=2 " Change all spaces to tabs based on tabstop :retab! " Change the tab stop to the new setting :set tabstop=4 " Go back to soft tabs :set expandtab " Replace all the tabs in the current file to spaces :retab 

当然,许多其他工具也会提供类似的function:如果像sedawkperlpython这样的东西不能很容易地做到,我会感到惊讶。

识别和一般编码风格标准因语言而异,项目也不尽相同。 采用编码风格标准有一个原因:不pipe是谁写的,代码都是统一的。 这样可以提高项目的易读性,说白了就更好了。

有一个原因在采用编码风格标准时是无效的,因为你喜欢它。 编码标准的存在正是因为人们的喜好不一样,如果留给自己的话,就会出现混乱,不利于所有人。

如果你为自己单独编写代码,这是没有人会阅读的,请继续写下任何你喜欢的代码。 否则,遵循社区的公认标准将会使你的代码更加适合其他人的眼睛。 还要记住,如果您决定在将来为社区贡献代码,那么如果您已经习惯了自己的编码风格,则会更轻松。

至于改变标签大小,有许多支持Python的源代码格式化程序,大多数程序员的编辑器和IDE也具有这种能力。 您可能已经拥有它了,只是为您正在使用的编辑器查阅文档。

一个原因是,如果使用较less的空格缩进,则可以嵌套更多的语句(因为行长度通常限制为80)。

现在我很确定,有些人仍然不同意有多less嵌套结构应该是最大的。

使用4个空格或2个空格完全取决于你。 4个空格只是一个惯例。 最重要的是,不要混合制表符和空格。 使用空格键

用4个空格可以直观地识别长嵌套代码块。 debugging时节省时间。

如果你想和其他程序员一起编写python代码,那么如果你使用不同的缩进,那么就会成为一个问题。 大多数Python程序员倾向于使用4空间缩进。