Har*_*ons 69 python conventions pep8 indentation
在编写python时,我只使用2个空格来缩进,确定PEP-8确实建议有4个空格,但从历史上看,这是不寻常的.
那么,任何人都可以说服我使用4个空格而不是2个空格吗?有什么优点和缺点?
PS最后,将所有现有代码库从2个空间转换为4个空格的简单方法是什么?
PPS PEP-8还建议不要使用标签进行缩进.在这里阅读
所以,总结一下:
优点:
缺点:
谢谢.
Mar*_*kus 112
其他人都使用4个空格.这是使用我遇到并接受的4个空格的唯一原因.在我的心里,我仍然想要使用制表符(每个缩进1个缩进字符,有意义,没有?与其他空格分开缩进.我不关心制表符可以显示为不同的宽度,这没有语法上的区别.可能会发生的是,有些评论没有对齐.恐怖!)但我已经接受了,因为整个python社区使用4个空格,我使用4个空格.通过这种方式,我可以从其他人编写的片段中汇编代码,并且一切正常.
Ion*_*tan 69
我喜欢这样一个事实:四个空格字符可以很好地缩进函数的内部代码,因为def +一个空格可以生成四个字符.
def·foo():
····pass
Run Code Online (Sandbox Code Playgroud)
for*_*ran 45
我认为真正的问题是为什么空格而不是标签.
标签显然更好:
空间的优点:
Chr*_*her 14
没有"更好"的缩进.这是一个宗教圣战话题.四是很好,因为它足以使缩进清晰,但不是很多,你的整个屏幕大多是空白,你必须水平滚动读取一半的程序.
它还具有与"标签"的历史定义相关的"半标签"的优点.
除此之外,请使用您的团队喜欢的任何内容.这就像巧克力和香草.
一种简单的切换方法是使用具有tab和space-tab支持的编辑器.将所有前导空格选项卡转换为选项卡,将选项卡大小设置为4,然后将前导选项卡转换回空格选项卡.
使用python脚本也很容易.只计算所有前导空格,然后将相同的数量添加到行的开头并将其写回.
Pes*_*sto 12
PEP不是你的老板.如果它已经是一致的2空格缩进,则没有理由改变所有代码以符合它.如果你真的认为它至关重要,你可以继续前进,但是,坦率地说,我没有.无论你在阅读和写作方面为你(和你的同事)提供最舒适的约定,你最好还是去.
如果您是处理源文件的唯一编码员,并且没有强制执行特定样式的编码标准,请使用您喜欢的任何编码标准。就个人而言(并且符合我们的编码标准),我使用硬标签,以便查看代码的人可以使用他们自己的偏好。
要进行更改,您只需将所有行首空格更改为两倍大的空格。有很多方法可以做到这一点;在 Vim 文本编辑器中,我可以想到两个:首先:
:%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)
Run Code Online (Sandbox Code Playgroud)
这是一个简单的正则表达式,它在行的开头查找一对或多对空格,并用两倍于找到的空格替换它们。它可以扩展为通过打开 vim 来处理所有文件:
vim *.py
Run Code Online (Sandbox Code Playgroud)
(或等价物),后跟(未经测试):
:argdo %s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)/ | w
Run Code Online (Sandbox Code Playgroud)
或者:
" 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
Run Code Online (Sandbox Code Playgroud)
当然,许多其他工具将提供类似的功能:如果像、或 之类的东西不能很容易地做到这一点sed,我会感到惊讶。awkperlpython
标识和通用编码风格标准因语言、项目而异。采用编码风格标准的原因之一是:无论是谁编写的,代码看起来都是统一的。这提高了项目的易读性,而且,坦率地说,它看起来更好。
采用编码风格标准时有一个无效的原因:因为您喜欢它。编码标准的存在正是因为人们的偏好不同,如果放任自流,混乱就会随之而来,损害所有人的利益。
如果您只是为自己编写代码,而没有人会阅读,那么请继续编写您喜欢的任何代码。否则,遵循社区公认的标准将使您的代码更容易被其他人接受。还要记住,如果您决定将来向社区贡献代码,如果您已经习惯了他们的编码风格,那么您会更轻松。
至于更改制表符大小,有许多支持Python的源代码格式化程序,并且大多数程序员的编辑器和IDE也具有此功能。您可能已经拥有它,只需查阅您正在使用的编辑器的文档即可。
另外一个原因是:当你有一些长行(超过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
Run Code Online (Sandbox Code Playgroud)