在编写python时,我只使用2个空格来缩进,确定PEP-8确实建议有4个空格,但从历史上看,这是不寻常的.
那么,任何人都可以说服我使用4个空格而不是2个空格吗?有什么优点和缺点?
PS最后,将所有现有代码库从2个空间转换为4个空格的简单方法是什么?
PPS PEP-8还建议不要使用标签进行缩进.在这里阅读
所以,总结一下:
优点:
包裹超过80行的字符串时有更多的空间来安排.
可以从代码片段中复制代码,它只是起作用.
缺点:
使用更深层次的嵌套语句,您可以减少实际代码的空间.
谢谢.
其他人都使用4个空格.这是使用我遇到并接受的4个空格的唯一原因.在我的心里,我仍然想要使用制表符(每个缩进1个缩进字符,有意义,没有?与其他空格分开缩进.我不关心制表符可以显示为不同的宽度,这没有语法上的区别.可能会发生的是,有些评论没有对齐.恐怖!)但我已经接受了,因为整个python社区使用4个空格,我使用4个空格.通过这种方式,我可以从其他人编写的片段中汇编代码,并且一切正常.
我喜欢这样一个事实:四个空格字符可以很好地缩进函数的内部代码,因为def +一个空格可以生成四个字符.
def·foo(): ····pass
我认为真正的问题是为什么空格而不是标签.
标签显然更好:
几乎不可能有不一致的缩进(我已经看到通常有4个空格缩进的代码,但是有些部分恰好是一个空格关闭,通过简单的检查很难判断是否有7或8个空格......那个除非您将tabstop设置为1个空格,否则不会发生选项卡.
Tab是缩进的逻辑语义表示,它允许您(和任何其他开发人员)选择显示您想要的多个"空格"(或更确切的列)而不会弄乱其他人的偏好.
如果您碰巧只有"记事本"(或其他虚拟编辑器),那么它也可以减少击键次数.
添加和删除选项卡是对称操作.大多数IDE在按Tab键时可以自动插入4个空格,但通常在击退退格时只删除1个空格(非缩进操作仍然可以作为shift-tab访问,但这是两个组合键)或者使用鼠标单击在缩进的中间并删除一个字符.
它们只占用1个字节而不是4个(乘以数千行,您可以节省几个KB!:p)
你只需要少一点来解决协议,因为如果你决定去寻找空间,那么讨论会再次开始选择多少(虽然共识似乎是四个左右).
空间的优点:
圭多喜欢他们.
您无法在此处轻松键入选项卡,它会转移焦点(尽管您可以粘贴一个).
没有"更好"的缩进.这是一个宗教圣战话题.四是很好,因为它足以使缩进清晰,但不是很多,你的整个屏幕大多是空白,你必须水平滚动读取一半的程序.
它还具有与"标签"的历史定义相关的"半标签"的优点.
除此之外,请使用您的团队喜欢的任何内容.这就像巧克力和香草.
一种简单的切换方法是使用具有tab和space-tab支持的编辑器.将所有前导空格选项卡转换为选项卡,将选项卡大小设置为4,然后将前导选项卡转换回空格选项卡.
使用python脚本也很容易.只计算所有前导空格,然后将相同的数量添加到行的开头并将其写回.
PEP不是你的老板.如果它已经是一致的2空格缩进,则没有理由改变所有代码以符合它.如果你真的认为它至关重要,你可以继续前进,但是,坦率地说,我没有.无论你在阅读和写作方面为你(和你的同事)提供最舒适的约定,你最好还是去.
任何体面的编辑器(emacs,vim)都会为你抽象出这整个废话.它可以同样适用于空格或制表符,并且可以配置为使用任意数量的空格(或制表符的任意数量的空格宽度).它也可以在不同的格式之间进行转换而不会有太多麻烦(请参阅:retab
vim中的命令).
如果您尝试批量转换源格式,我建议您查看缩进实用程序.
也就是说,我无法抗拒回答其他问题...我的偏好一直是标签,因为它绕过了整个问题,每个人都可以查看源代码,并设置他们认为合适的宽度.当你在编辑器中工作时,它的输入也很少,而这些编辑器对转换它没有帮助.至于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