我在Stack Overflow和PEP 8上看到,建议仅在Python程序中使用空格进行缩进.我能理解一致压痕的必要性,我感到痛苦.
空间是否有首选的潜在原因?我本以为选项卡更易于使用.
答案是在PEP中给出的[编辑:这段经文已在2013年被删除].我引用:
在最流行的缩进的Python的方式是只用空格.
您需要什么其他潜在原因?
更简单地说:还要考虑第一段中所述的PEP的范围:
本文档提供了Python代码的编码约定,包括主Python发行版中的标准库.
目的是使官方python发行版中的所有代码一致地格式化(我希望我们可以同意这是普遍的Good Thing™).
由于单个程序员的空格和制表符之间的决定是a)真正的品味和b)通过技术手段(编辑,转换脚本等)轻松处理,有一个明确的方式来结束所有讨论:选择一个.
Guido是一个可供选择的人.他甚至不需要给出理由,但他仍然通过参考经验数据来做到这一点.
出于所有其他目的,您可以将此PEP作为推荐,或者您可以忽略它 - 您的选择,您的团队或您的团队领导.
但是,如果我可以给你一个建议:不要混合; - )[编辑:混合标签和空格不再是一种选择.]
好吧,似乎每个人都强烈偏向空间.我只使用标签.我很清楚为什么.
标签实际上是一个很酷的发明,来到后空间.它允许您缩进而不会推动空间数百万次或使用假标签(产生空格).
我真的不明白为什么每个人都在区分标签的使用.这非常像老年人歧视年轻人选择更新更高效的技术,并抱怨脉冲拨号适用于每部手机,而不仅仅是这些花哨的新手机."音频拨号不适用于每部手机,这就是为什么它是错误的".
你的编辑器无法正确处理标签?好吧,得到一个现代编辑.可能是时候,我们现在正处于21世纪,而编辑是一个高科技复杂软件的时代早已过去.我们现在有大量的编辑器可供选择,所有这些都可以很好地支持标签.此外,您可以定义选项卡应该是多少,这是您无法使用空格的事情.看不到标签?什么是争论?好吧,你也看不到空格!
我可以大胆地建议找一个更好的编辑吗?大约10年前发布的这些高科技产品之一,显示出隐形字符?(讽刺)
使用空格会导致更多的删除和格式化工作.这就是为什么(以及所有其他知道这一点并同意我的人)使用Python的标签.
混合标签和空格是一个禁忌,没有争论.这是一团糟,永远不会奏效.
我个人不同意标签上的空格.对我来说,制表符是文档布局字符/机制,而空格用于代码中的命令之间的内容或描述.
我不得不同意Jim的评论,标签不是真正的问题,是人们以及他们想要如何混合标签和空格.
也就是说,为了惯例,我强迫自己使用空格.我重视个人偏好的一致性.
空格的原因是标签是可选的.空格是标点符号中实际最低的共同点.
每个体面的文本编辑器都有"用空格替换选项卡",很多人都使用它.但不总是.
虽然一些文本编辑器可能会用标签替换一系列空格,但这种情况确实很少见.
底线.你不能错过空间.你可能会出差错的标签.因此,请勿使用制表符并降低出错的风险.
标签的问题在于它们是不可见的,人们永远不会同意标签的宽度.当您混合使用制表符和空格,并且将tabstops设置为除Python之外的其他东西(每8个空格使用tabstops)时,您将看到与Python看到的不同布局的代码.而且由于布局决定了块,您将看到不同的逻辑.它会导致微妙的错误.
如果你坚持违反PEP 8并使用标签 - 或者更糟糕的是,混合标签和空格 - 至少总是使用'-tt'参数运行python,这会产生不一致的缩进(有时是一个标签,有时候是同一个缩进的空格等级)错误.此外,如果可能,将编辑器设置为以不同方式显示选项卡.但实际上,最好的方法是不使用制表符,句号.
混合制表符和空格时会出现缩进的主要问题.显然这并没有告诉你应该选择哪一个,但即使你通过掷硬币来挑选它也是一个很好的理由推荐一个.
但是,恕我直言,有一些小的理由支持空格而不是标签:
不同的工具.有时代码会在程序员编辑器之外显示.例如.发布到新闻组或论坛.空间通常比这里的标签更好 - 任何空间都会被破坏,标签也会这样做,但反之亦然.
程序员对源的看法不同.这是非常主观的 - 它要么是标签的主要好处,要么是根据你所在的方面来避免它们的原因.从好的方面来说,开发人员可以使用他们喜欢的缩进来查看源代码,因此开发人员更喜欢使用2空格缩进,可以在同一个源上使用8空间开发人员,并且仍可以按照他们喜欢的方式查看.缺点是这会产生影响 - 有些人喜欢8空间,因为它提供了非常明显的反馈,他们的嵌套太深 - 他们可能会看到2-indenter检查的代码不断地包含在他们的编辑器中.让每个开发人员以相同的方式查看代码会导致线路长度更加一致,其他问题也是如此.
继续行缩进.有时您想缩进一行以表明它是从前一行中携带的.例如.
def foo(): x = some_function_with_lots_of_args(foo, bar, baz, xyzzy, blah)
如果使用制表符,则无法在编辑器中使用不同的tabstops而不混合空格和制表符的情况下对齐.这有效地杀死了上述好处.
显然,这是一个深刻的宗教问题,编程受到困扰.最重要的问题是我们应该选择一个 - 即使那不是你喜欢的那个.有时我认为显着压痕的最大优点是至少我们没有放置支撑放置火焰战.
同样值得一读的是Jamie Zawinski关于这个问题的这篇文章.
请注意,使用选项卡会混淆PEP 8的另一个方面:
将所有行限制为最多79个字符.
假设您假设使用标签宽度为2而我使用标签宽度为8.您编写所有代码以使最长行达到79个字符,然后我开始处理您的文件.现在我有了难以阅读的代码,因为(正如PEP所述):
大多数工具中的默认包装会破坏代码的可视结构
如果我们都使用4个空格,它总是一样的.编辑器可以支持80个字符宽度的任何人都可以轻松阅读代码.注意:80个字符的限制本身就是一场神圣的战争,所以我们不要在这里开始.
任何非糟糕的编辑器都应该有一个选项来使用空格,就好像它们是标签(插入和删除)一样,所以这真的不应该是一个有效的参数.
这个问题的答案是:PEP-8想要提出建议并决定由于空间更受欢迎,因此强烈建议使用空格而不是标签.
关于PEP-8的说明
PEP-8说'每个缩进级别使用4个空格'.
很明显,这是标准建议.
"对于你不想搞砸的真正旧代码,你可以继续使用8个空格的标签."
很明显,在某些情况下可以使用制表符.
"永远不要混合标签和空格."
这显然禁止混合 - 我想我们都同意这一点.Python可以检测到这种情况并经常发生窒息 使用-tt参数会使其成为显式错误.
'缩进Python最流行的方法是仅使用空格.第二种最流行的方式是仅使用标签.
这清楚地表明两者都被使用.只是为了超清楚:你仍然不应该在同一个文件中混合使用空格和制表符.
"对于新项目,强烈建议仅使用空格."
这是一个明确的建议,也是一个强有力的建议,但不是禁止标签.
我在PEP-8中找不到自己问题的好答案.我使用标签,我在历史上用过其他语言.Python接受独家使用选项卡的源代码.这对我来说已经足够了.
我以为我会去处理空间.在我的编辑器中,我将文件类型配置为仅使用空格,因此如果我按Tab键,它会插入4个空格.如果我按Tab键太多次,我必须删除这些空格! Arrgh! 标签删除次数是其四倍!我的编辑器不能说我使用4个空格进行缩进(虽然AN编辑器可能会这样做)并且显然坚持一次删除一个空格.
当读取缩进时,不能告诉Python将制表符视为n个空格吗?如果我们可以同意每个缩进4个空格和每个选项卡4个空格并允许Python接受它,那么就没有问题.
我们应该找到问题的双赢解决方案.