代码之家  ›  专栏  ›  技术社区  ›  HardQuestions

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

  •  60
  • HardQuestions  · 技术社区  · 17 年前

    PEP-8 真的建议有4个空间,但从历史上看,对我来说这是不寻常的。

    有人能说服我用4个空格代替2个吗?赞成和反对意见是什么?

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


    read here


    因此,总结一下:

    赞成的意见:

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

    欺骗:

    谢谢

    13 回复  |  直到 8 年前
        1
  •  135
  •   Markus    17 年前

    其他人使用4个空格。这是使用我遇到并接受的4个空格的唯一原因。在我心中,我仍然希望使用制表符(每缩进1个缩进字符,有意义,不是吗?将缩进与其他空格分开。我不在乎制表符是否可以使用 因为宽度不同,所以在语法上没有区别。可能发生的最糟糕的情况是,一些评论不一致。恐怖但是我已经接受了,因为python社区作为一个整体使用4个空间,所以我使用4个空间。通过这种方式,我可以从其他人编写的代码片段中汇编代码,并且一切正常。

        2
  •  79
  •   Ionuț G. Stan    17 年前

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

    def·foo():
    ····pass
    
        3
  •  59
  •   fortran    11 年前

    标签显然更好:

    • 这几乎使我感到不安 不可能有不一致的缩进 (我看到的代码通常有4个空格缩进,但有些部分恰好有一个空格,很难通过简单的检查判断是否有7或8个空格…制表符不会出现这种情况,除非您将tabstop设置为1个空格)。
    • Tab是一个合乎逻辑的 语义的 对于缩进表示,它允许您(和任何其他开发人员)选择 陈列 在不影响他人偏好的情况下,尽可能多的“空格”(或者更确切地说是列)。
    • 也是 减少击键次数 如果您碰巧手头只有“记事本”(或其他虚拟编辑器)。
    • 它们只占用1字节而不是4字节(乘以数千行,可以节省几KB!:p)
    • 你少了一件事来达成协议,因为如果你决定使用空格,那么讨论将再次开始选择多少空格(尽管共识似乎在四个空格左右)。

    空间的优势:

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

    它还有一个优点,就是它是一个“半选项卡”,与“选项卡”的历史定义不同

    切换的一个简单方法是使用支持制表符和空格制表符的编辑器。将所有前导空格选项卡转换为选项卡,将选项卡大小设置为四,然后将前导空格选项卡转换回空格选项卡。

    使用python脚本也很容易。只需数一数所有的前导空格,然后在行首加上相同的数量,然后写出来。

        5
  •  14
  •   Pesto    17 年前

    政治公众人物不是你的老板。如果它已经是一致的2-空格缩进,那么就没有理由更改所有代码以符合它。如果你真的认为这很重要的话,你可以继续下去,但是,坦率地说,我不这么认为。无论你(和你的同事)在阅读和写作中都能得到最大的安慰,你最好还是按照惯例去做。

        6
  •  7
  •   rmeador    17 年前

    任何一个像样的编辑器(emacs、vim)都会帮你把这些废话抽象出来。它同样适用于空格或制表符,并且可以配置为使用任意数量的空格(或制表符字符的任意数量的空格宽度)。它还可以在不同格式之间进行转换,而不会有太多麻烦(请参阅 :retab vim中的命令)。

    indent 公用事业

    也就是说,我忍不住要回答另一个问题。。。我的偏好一直是标签,因为它绕过了整个问题,每个人都可以查看他们认为合适的宽度设置的源代码。当您在编辑器中工作时,它的输入量也会大大减少,这对转换它没有帮助。至于2对4的空间,这纯粹是装饰性的。

        7
  •  6
  •   HardQuestions    17 年前

    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
    
        8
  •  5
  •   DrAl    17 年前

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

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

        9
  •  3
  •   Daniel C. Sobral    17 年前

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

    当采用编码样式标准时,有一个原因是无效的:因为您喜欢它。编码标准的存在正是因为人们的偏好不同,如果任由他们自己选择,混乱就会接踵而至,对所有人都不利。

    如果你只为自己编写代码,没有人会读,那就去写你喜欢的东西吧。否则,遵循社区公认的标准将使您的代码更符合其他人的眼光。还要记住,如果您决定将来为社区贡献代码,那么如果您已经习惯了他们的编码风格,您将有一个更轻松的时间。

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

        10
  •  1
  •   Bastien Léonard    17 年前

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

    现在我很确定有些人仍然不同意最大嵌套结构的数量。

        11
  •  1
  •   user278892 user278892    16 年前

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

        12
  •  1
  •   Ned Batchelder    16 年前

    如果您想与其他程序员一起编写python代码,那么如果您使用不同的缩进作为他们的缩进,这将成为一个问题。 大多数Python程序员倾向于使用4-空间缩进。

        13
  •  0
  •   ghostdog74    17 年前