当前位置:  开发笔记 > 编程语言 > 正文

为什么Python pep-8强烈建议使用标签上的空格来缩进?

如何解决《为什么Pythonpep-8强烈建议使用标签上的空格来缩进?》经验,为你挑选了8个好方法。

我在Stack Overflow和PEP 8上看到,建议仅在Python程序中使用空格进行缩进.我能理解一致压痕的必要性,我感到痛苦.

空间是否有首选的潜在原因?我本以为选项卡更易于使用.



1> 小智..:

答案是在PEP中给出的[编辑:这段经文已在2013年被删除].我引用:

最流行的缩进的Python的方式是只用空格.

您需要什么其他潜在原因?

更简单地说:还要考虑第一段中所述的PEP的范围:

本文档提供了Python代码的编码约定,包括主Python发行版中的标准库.

目的是使官方python发行版中的所有代码一致地格式化(我希望我们可以同意这是普遍的Good Thing™).

由于单个程序员的空格和制表符之间的决定是a)真正的品味和b)通过技术手段(编辑,转换脚本等)轻松处理,有一个明确的方式来结束所有讨论:选择一个.

Guido是一个可供选择的人.他甚至不需要给出理由,但他仍然通过参考经验数据来做到这一点.

出于所有其他目的,您可以将此PEP作为推荐,或者您可以忽略它 - 您的选择,您的团队或您的团队领导.

但是,如果我可以给你一个建议:不要混合; - )[编辑:混合标签和空格不再是一种选择.]


同意.一致性比制表符X空间与Y空间更重要.
让我想知道......为什么标准库有这么多的mixedCase方法名?
["我的建议是始终在Mac上使用标签 - 然后它在Mac上看起来很好,至少在任何地方都能正确解析.出于同样的原因,我建议总是在Unix上使用标签\"(因此在那里缩进8个位置) \),但大多数Python用户似乎反对我."](http://legacy.python.org/search/hypermail/python-1994q2/0205.html)-Guido van Rossum,1994
那么为什么这么多程序员选择在PEP-8之前使用空格?这就是我真正想知道的.标签的优点对我来说显而易见,但不是空格.
@dorkitude:a)没有人是完美的.b)历史原因.
@noumenal:本文中提到的(长期过时的)操作系统和编辑的问题应该清楚地表明它的论点今天没有相关性.

2> 小智..:

好吧,似乎每个人都强烈偏向空间.我只使用标签.我很清楚为什么.

标签实际上是一个很酷的发明,来到空间.它允许您缩进而不会推动空间数百万次或使用假标签(产生空格).

我真的不明白为什么每个人都在区分标签的使用.这非常像老年人歧视年轻人选择更新更高效的技术,并抱怨脉冲拨号适用于每部手机,而不仅仅是这些花哨的新手机."音频拨号不适用于每部手机,这就是为什么它是错误的".

你的编辑器无法正确处理标签?好吧,得到一个现代编辑.可能是时候,我们现在正处于21世纪,而编辑是一个高科技复杂软件的时代早已过去.我们现在有大量的编辑器可供选择,所有这些都可以很好地支持标签.此外,您可以定义选项卡应该是多少,这是您无法使用空格的事情.看不到标签?什么是争论?好吧,你也看不到空格!

我可以大胆地建议找一个更好的编辑吗?大约10年前发布的这些高科技产品之一,显示出隐形字符?(讽刺)

使用空格会导致更多的删除和格式化工作.这就是为什么(以及所有其他知道这一点并同意我的人)使用Python的标签.

混合标签和空格是一个禁忌,没有争论.这是一团糟,永远不会奏效.


完全同意这篇文章.使用空间是为了傻瓜,他们喜欢在压痕错误的这一个空间上绊倒.如果您的缩进被1个标签取消,我保证您会注意到它.
要添加一下,看看你的键盘,TAB键的符号清楚地描绘了缩进 - 它是键的缩进目的而不是SPACE.PEP8建议使用空格是一个错误恕我直言,但它只是一个建议 - http://en.wikipedia.org/wiki/Tab_character#Tab_characters
@Zingham _没有人可以独占使用标签:标签和空格总是一起使用,这会导致不一致.我和其他成千上万的人每天都在使用它们.用于缩进的选项卡,用于对齐的空格.您觉得这个概念的哪个部分非常难以理解,为什么您确信不可能始终如一地应用它?

3> Soviut..:

我个人不同意标签上的空格.对我来说,制表符是文档布局字符/机制,而空格用于代码中的命令之间的内容或描述.

我不得不同意Jim的评论,标签不是真正的问题,是人们以及他们想要如何混合标签和空格.

也就是说,为了惯例,我强迫自己使用空格.我重视个人偏好的一致性.


我试图强迫自己使用空格,但编辑器(至少Eclipse + PyDev)明智的选项卡赢了,特别是如果你启用show invisible characters.我可以轻松地将标签设置为4,8,6个视觉空间.所以在我的代码中至少我重视个人偏好,如果这是现有代码库中已建立的约定,则坚持使用空格.
只要你没有在团队中编码,这就没问题.一旦你进入一个团队,你同意一个单一的约定并坚持下去.

4> S.Lott..:

空格的原因是标签是可选的.空格是标点符号中实际最低的共同点.

每个体面的文本编辑器都有"用空格替换选项卡",很多人都使用它.但不总是.

虽然一些文本编辑器可能会用标签替换一系列空格,但这种情况确实很少见.

底线.你不能错过空间.你可能会出差错的标签.因此,请勿使用制表符并降低出错的风险.


我永远不会发誓以错误的方式做某事只是因为很多其他人(人,文本编辑等)也恰好是错误的方式.在2015年,一个不能很好地处理标签的文本编辑器属于垃圾箱.
所以有人最后说过:使用空格因为它是最低的共同点.同样的规则使我们能够坚持政府办公室的MBR,BIOS和纸质表格.除了这些实际上存在概念问题,而标签与空格是100%愚蠢的用户问题.
“空格不能出错。制表符可能出错”。我发现那是100%颠倒的错误。根据我的经验:“ Tab键不会出错。空格可能会出错”……尤其是在共享代码时。

5> Thomas Woute..:

标签的问题在于它们是不可见的,人们永远不会同意标签的宽度.当您混合使用制表符和空格,并且将tabstops设置为除Python之外的其他东西(每8个空格使用tabstops)时,您将看到与Python看到的不同布局的代码.而且由于布局决定了块,您将看到不同的逻辑.它会导致微妙的错误.

如果你坚持违反PEP 8并使用标签 - 或者更糟糕的是,混合标签和空格 - 至少总是使用'​​-tt'参数运行python,这会产生不一致的缩进(有时是一个标签,有时候是同一个缩进的空格等级)错误.此外,如果可能,将编辑器设置为以不同方式显示选项卡.但实际上,最好的方法是不使用制表符,句号.


不,如果我使用8个宽的标签,你使用6个宽的标签,我们共享代码,它不会搞砸.它只是Python解释器的一个选项卡.
不,空间也是如此.人们可以就空间的宽度达成一致.
确实,标签是不可见的,人们无法就标签的宽度达成一致.但空间也是如此.混合制表符和空格时,就会出错.但是你为什么要把这种情况归咎于标签而不是空格呢?
单个空格可以始终具有相同的宽度,但带空格的缩进并不总是相同的宽度.我没有看到如何同意使用选项卡n空格宽是任何不同的同意缩进与n空格.
是的,我知道混合两者的问题可能导致.我不明白的是为什么有些人会责怪这一点.问题在于混合它们,而不是特别是标签.您可以通过用空格替换制表符来解决问题,但您也可以通过用制表符替换空格来解决问题.
你是什​​么意思,"人们看空间"?缩进的空格与缩进的制表符一样可见/不可见.我不是在考虑它,我只是在寻找一个有意义的解释.
你甚至*读*PEP-8?它*不*禁止标签.不要告诉我让我和编辑混淆的是什么.你知道吗,我放弃了.你显然是在试图推动自己的偏好,然后,当你受到质疑时,推卸责任.
是的,我可能会使用8宽的缩进缩进,您可能会使用6宽的缩进缩进.就像我可能使用8个空格来缩进,而你可能会使用6个空格来缩进.在*两个*案例中,您必须就缩进宽度达成一致.再一次,他们是平等的,但标签是责任.为什么?
所以换句话说,你说"不要使用标签",然后当你意识到你不能支持那个声明时,除了你之外还要责怪其他人?
阅读此http://kymair.com/archives/45 - 我喜欢标签,因为它们允许配置个人视图,并且它们更容易输入; 1个标签== 1个缩进.Maybie应该有一个新角色,我叫spabs:D
不同意标签的宽度是_feature_而不是bug; 您可以选择您喜欢的缩进级别而无需修改代码.
@ThomasWouters如果有人称自己为程序员而又对使用标签进行缩进的概念感到困惑,也许他们应该选择不同的职业.
问题是您的编辑器可能会使用标签8宽,我的可能会使用6宽.这意味着当我们分享代码时,事情会变得混乱.每个人使用空间的原因是因为其他人都使用空格.它可能看似随意,而且确实如此.但它仍然是一个非常非常好的理由.
不,我在解释为​​什么你不能使用标签:因为它会混淆*其他人*.你自己和你的编辑经常这么做.这不是一个意见问题,这是许多人使用标签的一个非常常见的问题.这就是PEP-8(标准库的样式指南)禁止标签的原因.
简短的评论大小要求我不要重复我之前说的话,所以我不能详细说明每一条评论中的每一点.请在这整个帖子中*阅读*我所拥有的*实际陈述的内容*,因为你明显误解了所有内容,而是诉诸ad hominem攻击.
原因如下:使用4个空格的tabwidth,后跟选项卡的四个空格将与2个选项卡一样宽.使用4个空格的tabwidth(Python使用),相同的四个空格后跟一个选项卡只会与*one*tab一样宽.将两个样式混合在一个块中,代码将执行错误的操作.
标签被选中,因为它是人们看不到的标签.人们看到空间.人们通常不期望选项卡.标签丢失,因为它们显示类似的空格,而空格不显示类似的标签.这不是你可以改变的东西,而且对它起作用是愚蠢的.不要使用标签,它会没事的.
@arielf谈话是关于缩进,而不是对齐.缩进和对齐是两个独立的事情.您不应该使用制表符进行对齐,只能使用缩进.
@arielf如果你使用制表符进行缩进,你也不会遇到对齐问题.使用制表符进行缩进,使用空格进行对齐.无论缩进宽度偏好如何,它对每个人都很好.

6> Brian..:

混合制表符和空格时会出现缩进的主要问题.显然这并没有告诉你应该选择哪一个,但即使你通过掷硬币来挑选它也是一个很好的理由推荐一个.

但是,恕我直言,有一些小的理由支持空格而不是标签:

不同的工具.有时代码会在程序员编辑器之外显示.例如.发布到新闻组或论坛.空间通常比这里的标签更好 - 任何空间都会被破坏,标签也会这样做,但反之亦然.

程序员对源的看法不同.这是非常主观的 - 它要么是标签的主要好处,要么是根据你所在的方面来避免它们的原因.从好的方面来说,开发人员可以使用他们喜欢的缩进来查看源代码,因此开发人员更喜欢使用2空格缩进,可以在同一个源上使用8空间开发人员,并且仍可以按照他们喜欢的方式查看.缺点是这会产生影响 - 有些人喜欢8空间,因为它提供了非常明显的反馈,他们的嵌套太深 - 他们可能会看到2-indenter检查的代码不断地包含在他们的编辑器中.让每个开发人员以相同的方式查看代码会导致线路长度更加一致,其他问题也是如此.

继续行缩进.有时您想缩进一行以表明它是从前一行中携带的.例如.

def foo():
    x = some_function_with_lots_of_args(foo, bar, baz,
                                        xyzzy, blah)

如果使用制表符,则无法在编辑器中使用不同的tabstops而不混合空格和制表符的情况下对齐.这有效地杀死了上述好处.

显然,这是一个深刻的宗教问题,编程受到困扰.最重要的问题是我们应该选择一个 - 即使那不是你喜欢的那个.有时我认为显着压痕的最大优点是至少我们没有放置支撑放置火焰战.

同样值得一读的是Jamie Zawinski关于这个问题的这篇文章.


虽然对齐很简单.我只是像块一样使用括号并缩进每个arg.此外,在您的示例中,您可以使用空格,因为您在参数列表中,并且可以根据需要在其中堆叠尽可能多的空格.
@Soviut:如果你用空格缩进,只要用不同的标签大小查看对齐就会搞乱.保留它的唯一方法是使用制表符到缩进级别,然后使用空格来保留其余部分 - 即混合空格和制表符,这会导致其自身的问题.
@Brian:我不知道这会导致什么问题.这是正确的方法,缩进标签,对齐空间.它与__indentation__的混合空格和制表符完全不同.

7> Thane Brimha..:

请注意,使用选项卡会混淆PEP 8的另一个方面:

将所有行限制为最多79个字符.

假设您假设使用标签宽度为2而我使用标签宽度为8.您编写所有代码以使最长行达到79个字符,然后我开始处理您的文件.现在我有了难以阅读的代码,因为(正如PEP所述):

大多数工具中的默认包装会破坏代码的可视结构

如果我们都使用4个空格,它总是一样的.编辑器可以支持80个字符宽度的任何人都可以轻松阅读代码.注意:80个字符的限制本身就是一场神圣的战争,所以我们不要在这里开始.

任何非糟糕的编辑器都应该有一个选项来使用空格,就好像它们是标签(插入和删除)一样,所以这真的不应该是一个有效的参数.



8> quamrana..:

这个问题的答案是: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接受它,那么就没有问题.
我们应该找到问题的双赢解决方案.


**"我必须删除这些空格!Arrgh!删除标签的次数是标签的四倍!"** - 这是我使用制表符的一个原因,以及为什么我认为使用空格的人是疯了.:)我从来没有遇到过任何问题,除非我在使用空格的网页上粘贴了一些内容.然后一个简单的查找 - 替换修复.
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有