在编写 python 代码时,我只使用 2 个空格来缩进,当然 PEP-8 真的建议有 4 个空格,但从历史上看,这对我来说是不寻常的。

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

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


附言PEP-8 还严格建议不要使用制表符进行缩进。 在这里读


所以,总结一下:

优点:

  • 当缠绕超过 80 行长的字符串时,有更多的空间可以安排。
  • 可以从片段中复制代码并且它可以正常工作。

缺点:

  • 通过更深层次的嵌套语句,实际代码的空间就会减少。

谢谢。

有帮助吗?

解决方案

其他人都使用 4 个空间。这是我遇到并接受的使用 4 个空格的唯一原因。在我心里,我仍然想使用制表符(每个缩进 1 个缩进字符,有道理,不是吗?将缩进与其他空白分开。我不在乎选项卡可以 显示的 由于宽度不同,因此没有语法差异。最糟糕的情况是某些评论不一致。太恐怖了!)但我已经接受了,因为整个 python 社区使用 4 个空格,所以我也使用 4 个空格。这样,我可以从其他人编写的片段中组装代码,并且一切正常。

其他提示

我喜欢这样一个事实:四个空格字符可以很好地缩进函数的内部代码,因为 def + 一个空格可以构成四个字符。

def·foo():
····pass

我认为真正的问题是为什么是空格而不是制表符。

标签显然更好:

  • 它使得几乎 不可能有不一致的缩进 (我见过代码通常有 4 个空格缩进,但有些部分恰好少了一个空格,通过简单的检查很难判断是否有 7 个或 8 个空格......使用制表符不会发生这种情况,除非您将制表位设置为 1 个空格)。
  • Tab 是一个逻辑 语义 缩进的表示,它允许您(和任何其他开发人员)选择 展示 您想要多少“空间”(或者更确切地说是列),而又不影响其他人的偏好。
  • 也是 更少的击键次数 如果您手头碰巧只有“记事本”(或其他虚拟编辑器)。
  • 添加和删​​除选项卡是 对称的 手术。大多数 IDE 可能会在按 Tab 键时自动插入 4 个空格,但通常在按 Backspace 时仅删除 1 个空格(取消缩进操作仍可通过 Shift-Tab 进行访问,但这是两个按键组合)或者您使用鼠标单击在缩进的中间删除一个字符。
  • 它们只占用 1 个字节而不是 4 个字节(乘以数千行,您可以节省几 KB!:p)
  • 你少了一件事情来达成协议,因为如果你决定去寻找空间,那么讨论会再次开始以选择多少个(尽管共识似乎在四个左右)。

空间的优点:

  • 圭多喜欢他们。
  • 您无法在此处轻松键入选项卡,它会转移焦点(尽管您可以粘贴选项卡)。

没有“更好”的缩进。这是一个宗教圣战话题。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

如果您是唯一处理源文件的编码人员,并且没有强制执行特定样式的编码标准,请使用您喜欢的任何方式。就我个人而言(并且符合我们的编码标准),我使用硬选项卡,以便任何查看代码的人都可以使用自己的偏好。

要进行更改,您只需将所有行起始空间更改为两倍大即可。有很多方法可以做到这一点;在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 无法轻易做到这一点。

标识和通用编码风格标准因语言、项目而异。采用编码风格标准的原因有一个:这样无论是谁写的,代码看起来都是统一的。这提高了项目的易读性,而且,坦率地说,它看起来更好。

采用编码风格标准时,有一个无效的原因:因为你喜欢它。编码标准的存在正是因为人们的偏好不同,如果放任自流,混乱就会随之而来,损害所有人的利益。

如果您只是为自己编写代码,而没有人会阅读,那么请继续编写您喜欢的任何代码。否则,遵循社区公认的标准将使您的代码更容易被其他人接受。还要记住,如果您决定将来向社区贡献代码,如果您已经习惯了他们的编码风格,那么您会更轻松。

至于更改制表符大小,有许多支持Python的源代码格式化程序,并且大多数程序员的编辑器和IDE也具有此功能。您可能已经拥有它,只需查阅您正在使用的编辑器的文档即可。

原因之一是,如果缩进使用较少的空格,您将能够嵌套更多的语句(因为行长度通常限制为 80)。

现在我很确定有些人仍然不同意最多应该有多少嵌套结构。

更容易直观地识别具有 4 个空格的长嵌套代码块。节省调试时间。

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

使用 4 个空格还是 2 个空格完全取决于您。4个空格只是一个约定。最重要的是,不要混合使用制表符和空格。使用空格键

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top