在编写python时,我只使用2个空格进行缩进,确定PEP-8确实建议有4个空格,但从历史上看,这是不寻常的。
那么,任何人都可以说服我使用4个空格而不是2个空格吗?有什么优点和缺点?
P.S。最后,将所有现有代码库从2个空格转换为4个空格的简单方法是什么?
P.P.S。 PEP-8还建议不要使用标签进行缩进。 read here
所以,总结一下:
优点:
缺点:
感谢。
答案 0 :(得分:106)
其他人都使用4个空格。这是使用我遇到并接受的4个空格的唯一原因。在我的心里,我仍然想要使用标签(每个缩进1个缩进字符,有意义,没有?与其他空格分开缩进。我不关心标签可以显示作为不同的宽度,没有语法差异。可能发生的最糟糕的是一些评论不排队。恐怖!)但我已经接受了,因为整个python社区使用4个空格,我使用4个空格。通过这种方式,我可以从其他人编写的片段中汇编代码,并且一切正常。
答案 1 :(得分:68)
我喜欢这样一个事实:四个空格字符可以很好地缩进函数的内部代码,因为def +一个空格会产生四个字符。
def·foo():
····pass
答案 2 :(得分:39)
我认为真正的问题是为什么空格而不是标签。
标签显然更好:
空间的优点:
答案 3 :(得分:14)
没有“更好”的缩进。这是一个宗教圣战话题。四是很好,因为它足以使缩进清晰,但不是很多,你的整个屏幕大多是空白,你必须水平滚动读取一半的程序。
对于“标签”的历史定义,它还具有“半标签”的优点。
除此之外,请使用您的小组喜欢的任何内容。这就像巧克力和香草。
一种简单的切换方法是使用具有制表符和空格标签支持的编辑器。将所有前导空格选项卡转换为选项卡,将选项卡大小设置为4,然后将前导选项卡转换回空格选项卡。
使用python脚本也很容易。只计算所有前导空格,然后将相同数量添加到行的开头并将其写回。
答案 4 :(得分:11)
PEP不是你的老板。如果它已经是一致的2空格缩进,则没有理由改变所有代码以符合它。如果你真的认为它至关重要,你可以继续前进,但是,坦率地说,我没有。无论你在阅读和写作方面为你(和你的同事)提供最舒适的约定,你最好还是去。
答案 5 :(得分:7)
任何体面的编辑(emacs,vim)都会为你抽象出这些废话。它可以同样适用于空格或制表符,并且可以配置为使用任意数量的空格(或制表符的任意数量的空格宽度)。它还可以在不同格式之间进行转换而不会有太多麻烦(请参阅vim中的:retab
命令)。
如果您尝试批量转换源格式,我建议您查看indent实用程序。
那就是说,我无法拒绝回答另一个问题......我的偏好一直是标签,因为它绕过了整个问题,每个人都可以按照他们认为合适的宽度设置来查看源代码。当你在编辑器中工作时,它的输入也很少,而这些编辑器对转换它没有帮助。至于2比4空间,这纯粹是装饰性的。
答案 6 :(得分:5)
另外一个原因是:当你有一些长行(超过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
答案 7 :(得分:4)
如果您是唯一一个处理源文件的编码器,并且没有强制执行特定样式的编码标准,请使用您认为合适的任何内容。就个人而言(并符合我们的编码标准),我使用硬标签,以便无论谁看到代码都可以使用自己的偏好。
要进行更改,您只需将所有行首空格更改为两倍大的空格。有很多方法可以做到这一点;在Vim文本编辑器中,我可以想到两个:第一:
:%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)
这是一个简单的正则表达式,它在行的开头查找一对或多对空格,并将其替换为找到的空格的两倍。它可以扩展为通过打开vim来执行所有文件:
vim *.py
(或等效的),然后是(未经测试的):
: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
当然,许多其他工具都会提供类似的功能:如果sed
,awk
,perl
或python
之类的内容无法做到这一点,我会感到惊讶容易。
答案 8 :(得分:3)
标识和通用编码风格标准因语言,项目而异。采用编码风格标准有一个原因:无论是谁编写代码,代码看起来都是统一的。这提高了项目的易读性,而且直言不讳地说,它看起来更好。
采用编码风格标准时,有一个原因是无效的:因为你喜欢它。编码标准的存在恰恰是因为人们的偏好不同,如果留给他们自己,就会产生混乱,从而损害所有人的利益。
如果您正在为自己编写代码,没有人会阅读,请继续编写任何您喜欢的代码。否则,遵循您所接受的社区标准将使您的代码更加适合其他人的眼睛。并且还要记住,如果您决定将来为社区贡献代码,那么如果您已经习惯了他们的编码风格,那么您将有更轻松的时间。
至于更改选项卡大小,有许多支持Python的源代码格式化程序,大多数程序员的编辑器和IDE也具有此功能。您可能已经拥有它,只需要查阅您正在使用的编辑器的文档。
答案 9 :(得分:1)
一个原因是,如果使用较少的空格进行缩进,则可以嵌套更多语句(因为行长度通常限制为80)。
现在我很确定有些人仍然不同意有多少嵌套构造应该是最大的。
答案 10 :(得分:1)
如果你想和其他程序员一起编写python代码,那么如果你使用不同的缩进就会成为一个问题。 大多数Python程序员倾向于使用4空间缩进。
答案 11 :(得分:1)
通过4个空格可以直观地识别长嵌套代码块。调试时节省时间。
答案 12 :(得分:0)
使用4个空格或2个空格完全取决于您。 4个空间只是一个惯例。最重要的是,不要混合标签和空格。使用空格键