在编写python编程时,我总是使用制表符进行缩进。但是我在这里遇到了一个问题,有人指出大多数Python程序员使用空格而不是制表符来最小化编辑器到编辑器的错误。
这有什么区别?对于python,为什么要使用空格而不是制表符呢?或者根本不是真的?
我应该切换编辑器来立即插入空格而不是制表符,还是像以前那样继续?
- 另请参见程序员:制表符和空格。在任何情况下,什么是所有内容的正确缩进字符?
厌倦了追寻压痕印刷错误(8个空格?不,7 oops 9…)我将源代码切换为"仅标签"。
1制表符==1缩进级别,完全停止
要点是:如果要将缩进显示为4、8或pi/12字符宽度,只需更改文本编辑器中的设置,就可以避免代码混乱。
(就个人而言,我使用4个字符宽度的标签…但有些人更喜欢3或8个空格,甚至使用可变宽度字体。)
- 这也是我的偏好,但我希望听到一个明确的声明,反对它的论点。是不是有些编辑不让用户决定制表位的宽度?如果是,嗯,嘿,程序员:找一个更好的F-ing编辑器
- 或者换一种说法:"标签"是有意义的。"空格"不是。它的意思取决于特定文件的标准。考虑到python/依赖于/依赖于缩进级别,我倾向于使用一个明确表示这样的级别:制表符。
- 当然,如果你可能会遇到你所说的一个空格缩进问题,你仍然可以用制表符来解决(不小心在制表符前输入了一个空格)。然而,当这种情况发生时,是不可能看到的。至少在所有的空间里,如果你犯了错误,事情就不会在视觉上排列起来。有了标签,一个空白的错误肉眼是看不见的。
- 如果您需要缩进代码的唯一原因是为了创建一个新的作用域,那就可以了。比如说,在分组()[]字符之间换行怎么样?您可以(a)将代码限制为只使用最简单的生成器,或者(b)使用整个地方都有有趣缩进的代码,或者(c)混合制表符和空格。所有这些对我来说似乎都比简单地使用4空间缩进糟糕得多。
- @Bryan Oakley:but if you accidentally insert a tab into your spaces the same will be true-the indentation will still be messed-up and you won't be able to see it.我认为,当索引是重要的,因为它在Python中,你应该能够清楚地看到你的索引,而最重要的出版商可以向你展示。@Ken:总是用一个单一的Tab为任何额外的独立(如内置的制动器)而你是好人。我完全不同意这不是美国信息交换标准码
- 空间被耽搁了,我发现所有四个空间都被Tab替换了。这就是Tabs的目的我不想在我的密码中出现错误这是我工作的语言,不是Python。
- @Inkredibl a tab can't be accidentally inserted when your editor maps the tab key to spaces
- @Brittohalloran,but if you're already using spaces as tabs(I.E.Inserting and deleting them in groups of 4 or whatever your preferred width is),then why not just use tabs?你甚至还能保住一些空间You even save some space that way.
- @Inkredibl because an accidental space will"hide"between tabs-see Bryan Oakley's how above that you were originally reply to.强迫只有空中的暗示,没有白色的空间会隐藏。
- @Brittohalloran anyway,this is just a feeling of"security"as you used to feeling safe from tabs and when they happen you can't even imagine what the frack is on.Python needs to make tabs(or spaces for that matter)a syntax wrong if you want to be really safe,otherwise it's just a bad design you're trying to road around.无论如何,只要你是一个完整的人(我个人不会和使用空间的人打交道,大概是因为我使用了许多不同的出版商)。
- 不提及Tabs使用4次较少字节
- Python's syntax parser is smarter than you give it credit for(至少2.7 and older is,they took this out of 3.x).一个隐藏在一个帐篷之前的空间,因为当它触及一个帐篷时,句法前进到下一个帐篷(8个帐篷)。SO 1 space+1 tab=8,1 tab by itself=8,8 spaces+1 tab=16 and so on.你可以通过Tab-Width:special comment来调整Tab stop的宽度。这是Python如何坚持它的诺言密码将执行你的期望
- 对我来说,这与代码中的模型和视野的分离非常相似,这里的Tab是模型(I.E.1 Indentation level),而视野是如何归还的(由编辑作为4个空间,或whatever)。使用空间就像试图硬码视图信息进入模型。
- 我也从空间开关到TABS-理论空间应该工作,但在实践中,TABS是高级的-PEP-8有这个错误。
- 当这是一个旧的威胁时,应该指向-tt如果你偶然混合了数据和空间,指挥线上的选项会产生错误。Its very handy at least in Python2 cf.docs.python.org/2/using/cmdline.html 355;command-line
- 为什么每个人都应该使用空间:如果每个单一的发展者在每一个单一的文件中使用100%的Tabs,那就很好。但是,如果任何文件都与两个标签和空间混杂在一起,你就会失去一切。说一个男人喜欢三个字,一个男人喜欢八个字。有些文件是混合的tabs和spaces到tab size 3。所以第一个打开这混合文件,写一些新的代码和线条。第二个男人打开了它,一切都很糟糕。空间禁忌不扩展到8尺寸,而Tabs扩展到8尺寸。如果每个人都使用空间,它看上去都一样。
- .这一论点正好相反:"为什么每个人都应使用Tabs:如果每个单一的文件中的每一个单一的发展使用100%的空间,那么这是很好的。但如果文件中的任何一个都与空间和Tabs混杂在一起,那么空间的东西就会变得更糟糕。"But if any of the files become mixed with both spaces and tabs,spaces mess things up."
- …最受欢迎的是Tabs。:)缩进-kr-i8这是Kernighan和Ritchie(还有Linus)做得对的。"每个人都使用标签"的优点是,每个人都可以选择希望标签显示的宽度。在我的"类似于Python的语言"中,解析器只是拒绝任何缩进空间。python对此有困难的原因是它试图变得聪明,并且允许两种类型的缩进,但是不可能正确地做到这一点。如果它们只需要空格,解析器应该拒绝缩进的制表符,反之亦然。kernel.org/doc/documentation/codingstyle(内核.org/doc/documentation/codingstyle)
- 这节省了几十年的时间,使打字速度缩短了75%。节能环保。
- 另一个重要的语言是空格en。wikipedia.org/wiki/whitespace_28programming_language%29
- @达沃斯为此,我建议不要使用制表符或空格进行缩进。可能是em空格(|?|或下划线。
- @丹妮尔哦,不,使用打印字符,你实际上可以看到不会是惯用的空白!
- @达沃斯,我在空白处看到的是,非空白字符是注释,缩进看起来有点类似于注释。但是如果你不喜欢它,你可以用一个em空间代替。
- 说到工具、Pycharm、Atom等,将空间组作为选项卡进行管理,这回应了选项卡更易于开发人员使用的论点。有时代码与4s的倍数不一致,因此使用空格可以更好地格式化。这是在政治公众人物8中的一个原因。
因为pep-8告诉我们使用空格。
- 实际上,我并不认为这需要空格,因为第二点是永远不要混合空格和制表符-如果你不能使用制表符,为什么要这样做。我把它看作是确保缩进有一个4个字符的间隙,可以用4个空格来完成,或者用制表位设置为4的制表符(这就是我使用Python的方法)。
- paxdiablo:python不知道tabstop设置的是什么,您的文件只是放入一个制表符,而您的编辑器会显示它,不管您怎么说。总是使用4个空格的原因是不能可靠地混合制表符。如果您使用制表符启动一个函数,然后以每缩进4个空格结束,那么解释器会认为您在函数到达转换时结束了函数。因为制表符和空格都是不可见的,所以当您第一次遇到这样的错误时,这是不明显的,当您在编辑器中看到一条抱怨意外缩进的消息时,它看起来很好。
- 我也只能希望看到一个"新约",其中pep-8改为推荐标签而不是空格。
- 这个论点不一定是个好论点,但我还是反对它,因为我认为由于其他原因,空格比制表符更好。
- 那个规格没有说明原因
- @亚姆科查里安,为什么不重要?只需要有一个任意的选择,因为在从一个编辑器切换到另一个编辑器时,您总是有可能出现混淆。
- @布鲁诺是的,这是最重要的原因,但当涉及到选择其中一个或另一个时,我怀疑我们需要权衡选择。我仍然犹豫不决,但坚持空间…浪费时间的更好方法!P
- PEP-8不适用于第三方项目。这是CPython自己的内部风格指南。盲目地遵循别人的标准,而不理解为什么这些规则到位,将不会产生更好的代码。
- @波波保罗认为"理性"反过来也同样有效。
- 我认为,这一论点是由PEP-8只是一个具体实例的标准哲学提出的。从长远来看,我认为标准是关于回顾的。如果你是一家大公司,或者是公司网络,你必须在不同的地点和时间加入代码,那么至少你有一个标准来(希望)期望提高代码自动化(+cpuhours)和减少代码黑客(+manhour$)。这可能更多的是一个管理者的关注,而不是原型的关注。我敢肯定,有胶水的黑客也经常被混合代码所困扰。
- 部分问题是,如果dev a的tab宽度设置为8个空格,然后dev b的tab宽度设置为4个空格,其中一行75个字符dev a的行宽度将超过80个字符。
- 有趣(或悲伤)的事情是:你可以混合空格和制表符,它实际上是工作的!唯一的问题是,虽然建议使用4个空格进行缩进,但python 2解释器将选项卡解释为8个空格。因此,如果您使用8个空格进行缩进,那么您可以很高兴地将空格和制表符混合在一起,完全没有问题(在Python2中)。以某种方式,Python编码约定与解释器不一致。
- @Rone然后"dev a"应该减少他/她的标签宽度。
- 任何理智的程序都将制表符解释为8个空格。因为…时间远古。打印您编辑的代码,将标签设置为非标准宽度,然后将其分类到终端。会很混乱的。缩进空间完全避免了这种混乱。
- 如果有的话,阅读所有的答案和评论让我注意到"房间里的大象"。也许python4应该引入大括号,而这不再是一个问题了。-p对于我来说,按"tab"按钮,得到4个空格是不正确的。(特别是在其他语言中,两个空格正成为"制表符"的标准。Yeeeech)让标签成为标签是我的2c。
- @Tobias_k不完全是;python 2将选项卡视为最多8个空格,以便使总缩进量达到8个空格的倍数。
- @切普纳,是的,这就是我的意思,我的意思是,标签通常是这样工作的,对吗?和这里所有其他评论中的措词一样草率。我的主要观点是4比8在公约和执行上的差异。
耶和华如此说,你要用四个字刻字。不多不少。四个是你要缩进的空格数,四个是你要缩进的空格数。你不可缩进八个,也不可缩进两个,除非你接着前进到四个。标签就在外面。--乔治布兰德尔
- 这个答案的谬误在于它暗示了4个空间是一个理想解。当然,这是最常见的/公认的缩进方法,但是当你想到一件事时,插入4个字符来表示一件事有点荒谬。我敢打赌,Tabs将在长期内赢得胜利,这仅仅是基于效率和简单性。
- 投票者!让我为您引用PEP-8:"每个缩进级别使用4个空格"。
- 软件开发中有太多的正统观念,原因太少。你的答案就是一个例子。
- @你说得对。正统观念太多了。但我的回答并不能代表这一点。这是一个笑话,根据一部著名电影(来自Python,明白吗?哈哈。)而且,在一种如此依赖于惯例的语言中,有了这个特定的惯例,每个人都可以在不必太担心格式错误的情况下移动内容。是的,我认为在需要的地方应该挑战正统。四个spapces缩进规则是不值得挑战的。
- @史蒂文莫斯利:十年前,塔克斯输掉了那场战争。你为已经在2013年失利的球队扎根。P
- @J&252;rgena.erhard"丢失"意味着你知道,事实上,现在代表着冲突的结束状态(悲惨的成见判断错误)。未来时态并不以现状为导向。一个好的未来学家分析可能性的领域。
- 你证明了人们提倡标签的观点——如果你需要上帝来指定空间的数量,或者人们会互相残杀,那么这不是一个好的解决方案。
- 如果只有编辑器可以配置为在按下tab键时插入空格。哦,等等。一致性是有价值的,尤其是当人们共享代码时。
使用一个显示制表符的编辑器(就这点而言,所有空格)。你在编程,而不是写文章。
我使用标签。在标签中没有一个空格错误的空间(如果你能看到的话)。问题是人们使用不同的编辑器,世界上唯一常见的事情是:tab==indent,如上所述。一些家伙进来时把tab键设置成了错误的空格数,或者是手动操作,弄得一团糟。选项卡并使用真正的编辑器。(这不仅仅与PEP相反,它是关于C/C++和其他空白不可知语言的)。
/从Soapbox下来
- 反驳:在我的工作中,我们不允许查看标签/空格。这是浪费时间,因为我们用C语言编程,所以空格/制表符不会影响逻辑/正确性。如果我们看到他们,我们会很生气,想要解决他们。我的老板不想为我们的时间付钱。
- 使用穿孔卡片的人可能会对vi说类似的话。我猜这就是空格和制表符真正重要的时候。
- 显示空白可能太(视觉上)分散注意力。
- @看起来很傻的柯蒂斯亚洛普。专业人士应该相信专业人士,不要浪费时间。
我在空格上使用制表符的主要原因是退格键。如果我在一行上,我想用退格键删除这一行上的一个缩进,如果是空格,我必须用退格键4x;但是,如果是制表符,我只需要敲击它一次。
我将继续使用制表符,因为在将制表符转换为空格之前已经说过类似的内容,但这并不是相反的方式。
我在想我要写一个简单的程序,将带有空格的代码转换为带有制表符的代码,因为我讨厌空格。他们把我逼上了墙!
哦!使用箭头键左右移动,在空间上总是让人头疼。
更新:Sublime Text 3现在用退格键删除了一个完整的软标签;不过,箭头键导航仍然很繁琐。
更新:我现在使用vscode并为它编写了tabsanity扩展来解决退格键、删除键和箭头键导航问题。
- 如果您使用的是Linux,那么有一个名为unexpand的程序,它将空格转换为制表符。(expand将制表符转换为空格。)
- 听起来很不错,但唉!我不使用Linux。不过,谢谢你的小费。
- 一个好的文本编辑器应该为你做你喜欢的选择。
- 我在为python使用notepad++,它确实允许我做一些间距设置,但是我仍然有箭头键和退格键导航问题。
- 使用ctrl+left和ctrl+right可以更快地导航。它是一个内置在大多数文本编辑器中的快捷键(如中所述,除了记事本以外的所有东西),可以移动到下一个单词。你不应该通过标签按左/右键,因为它们总是在一行的开头。
- 在标签页中前进很好,但是退格键呢?Ctrl+Backspace将我跳到上一行!使用制表符仍然没有替代品,我看没有理由使用空格。我将只使用记事本++>>textfx>>textfx edit>>将空格转换为制表符或制表符转换为空格。
- Vim(你用的是Vim,对吧?)在默认的python语法模式下,将自动删除空格的移位宽度。
- 那就是编辑器中的错误或配置错误。它应该跟踪按tab键将选项卡转换为4个空格字符的位置。然后,当它必须删除这4个空格字符时,它知道它们是通过按Tab键生成的,它知道用按Backspace键删除4个空格,实质上是颠倒了Tab键所做的横框。
- @萨桑,你说得对。Eclipse会注意到退格键并在一次按键中处理它,但是如果您使用箭头键进行导航,您仍然需要在每个选项卡上按键4次。你有一个不存在这个问题的IDE吗?
- -1任何优秀的编辑器都可以使用空格:s
- @你错了。即使是崇高的文本也不能处理箭头键场景,Visual Studio也不能处理退格键或箭头键场景。他们都是"好"的编辑!
- 缩进空间也会破坏开发人员的意图。见jedmao.ghost.io/2014/08/20/tabs-vs-spaces-the-age-old-war
- "我将只在记事本为++>>textfx>>textfx edit>>将空格转换为制表符或制表符转换为空格的空格中转换任何人的代码。"-1,如果你曾经参与过这样的项目,人们会讨厌你。您应该坚持项目使用的任何样式。但是,如果您的意思是将粘贴片段复制到代码中,那么显然您应该重新格式化以符合您的标准。
- Sublime文本似乎处理得很好(sublime text.com/docs/2/indentation.html)。
- @这篇文章发表于2010年。当时,Sublime并没有像现在这样处理标签。现在?Sublime正确处理退格,而不是箭头键导航。请参见更新的注释。
- 我明白了,我没注意时间戳。
- @unutbu您不能可靠地将空格转换为制表符,因为其中一些空格用于缩进,另一些用于对齐。无法解释两者之间的区别;因此,它不是一个可靠的工具。
- 您可以修改reindent.py脚本,以智能方式将空格转换为制表符。
- @乌特布,这就是我想告诉你的。除了将所说的代码解析为AST并将其与空白区(主要是过度杀戮)进行比较之外,没有任何智能方法。我以前一直沿着这条路走,实际上没有办法提取出用于缩进的空格与用于对齐的空格。你在说一个很大的"假设",却不知道你在说什么。试着自己写代码。你会看到的。
最"Python式"的方法是每个缩进级别使用4个空格。但是,python解释器将识别空格或制表符。唯一的Gottcha是你不能混合空格和制表符,选择一个或另一个。也就是说,规范建议使用空格,大多数开发人员都使用空格,所以除非您有一个非常好的理由不使用空格,否则我建议使用空格。
- 使用标签有很多很好的理由;问题是:有没有真正的理由不使用?据我所知,唯一的一个是"写PEP-8的人不喜欢它们",这看起来有点弱。
- imho标签的主要问题是代码经常使用多种工具查看或处理。(不仅仅是"你最喜欢的文本编辑器")。例如,您可以查看git diff、电子邮件代码片段、使用Web源代码查看工具等。如果选项卡间距与编辑器不匹配,这些工具将显示混乱。
- 所有好的工具都可以在空格中配置制表符大小:p
- "对于标签来说,最大的问题是经常使用多种工具查看或处理代码"——寻找更好的工具也是一种选择。
- 这是一种语言不应该像这样对空格敏感的方式。大括号允许自动缩进。
- @只有当他们用制表符来对齐,而不是缩进时,这才是真的。事实上,在一个简单的工具(如notepad.exe)中处理代码,当它使用制表符时,效果要好得多,因为home按钮位于行的开头,所以您最终不得不使用很多箭头键。
据我所知,这里是选项卡和空格的优缺点。
选项卡的优点:
- 减少缩进、取消缩进和遍历缩进所需的击键次数。(即使您的IDE有一些空间缩进的巧妙性,它也永远不会像标签那样好。)
- 不同的程序员可以根据需要使用不同的选项卡显示大小。
- 不能将光标"放在"缩进字符内。例如,假设您正在复制一些行,使用制表符,您可以在行首附近模糊地单击以开始选择,您将获得所有第一个制表符。如果使用空格,则很可能会错过第一个空格字符,除非您击中它与边距之间的小目标。与从行中删除缩进类似,如果光标位于四空格缩进字符的中间,大多数编辑器无法很好地处理按退格键。它通常会删除一个空格。有了标签,它可以按预期工作。
- 与其他语言的一致性,所以你不必设置你的编辑器使用,例如标签的C++/Java和Python的空间。
- 错误的缩进可能更明显(即,额外的标签比额外的空间大得多)。
标签的缺点:
- 大多数Python程序员都使用空格,所以您将违反约定。
- 使用空格对齐多行语句比使用制表符更容易。您可以使用制表符进行缩进,使用空格进行对齐,但在Python中这似乎有点危险!
有些人夸大了一些非问题:
您可能会在选项卡式缩进中得到混乱的空间,这会把事情搞砸:事实上,所有的IDE/编辑器都支持可视化空白,而在空间缩进中,您几乎同样可能会遇到混乱的选项卡!我看不出这是一个常见的错误。另外,大多数缩进错误都会被python捕获,好的IDE应该能够突出显示不同的缩进。
你不能很容易地用制表符对齐:如果你想实现字符的完美对齐,这是真的,但是PEP-8建议不要这样做,而且Python也不能很好地处理多行语句。
人们在编辑器中对选项卡显示大小有不同的设置,因此您的代码在不同的地方看起来会有所不同:是的,这实际上是选项卡的一个有益功能。
我已经开始使用空格来与其他Python代码保持一致,但老实说,我可能会改回制表符,这已经够令人沮丧的了。很大程度上取决于您的IDE的功能,但是在我的经验中,没有任何一种IDE对空间缩进的支持比仅仅使用制表符更好。
所以除非你真的不喜欢和大多数人不一致(大概不是全部!)python代码,使用制表符并打开空白可视化和缩进突出显示(如果可用)。对我来说,最大的原因是容易选择和(相当重要的IMO)减少击键。有些惯例是愚蠢的。
更新:我发现世界上有一个编辑器(不包括像vim这样的胡说)可以正确地支持空格作为缩进:atom。它有一个名为"原子制表符"的选项,使4个空格在所有方面都表现得像一个制表符(除了可以调整大小)。不幸的是,Atom是一个相当缓慢和臃肿的编辑器,但这是一个很好的功能,如果您被迫使用空格,它可能是一个不错的选择。希望有一天其他编辑会开始支持它。这是vscode的问题。
- "我开始使用空格来与其他Python代码保持一致,但老实说,我可能会改回空格,这已经够令人沮丧的了。"目前还不清楚您使用的是哪一个,您希望恢复到哪一个。可能是打字错误。
- 我想我会不同意你的观点,那么:—)原则上我更喜欢标签,但在实践中,当你不能控制浏览者时,空间会更好,例如基于网络的浏览者(Github,Trac浏览器,…),而你或多或少总是控制着编辑器(你用它来编写)。此外,无论选择是多么任意,都需要做出一个选择,并且它是由PEP-8做出的(否则,根据协作环境,最终可能会出现混合类型)。
- 是的,很少有地方你没有控制权。另外,如果你搞错了,看起来也不错。我认为95%的标签用户使用四个空格(包括GitHub),其余的使用2个,所以实际上这不是一个问题。混合风格更令人关注,但只要你在一个项目中保持一致,这就真的无关紧要了。
- "使用空格对齐多行语句比使用制表符更容易。您可以使用制表符进行缩进,使用空格进行对齐,但在Python中似乎有点危险!"正如下面所说,代码不是ASCII的艺术,不要与空间对齐,只缩进一次(例如,对于嵌套的dict、长函数原型等)。
- 使用空格的另一个原因是:对于vim和emacs,我习惯于通过鼠标选择和鼠标单击(在插入模式下)来复制粘贴。但是我的python脚本是标签缩进的,这个复制粘贴操作将标签转换为空格,将以前的标签与新的空格混合在一起!由于我喜欢使用制表符缩进,所以我必须学习CTRL+v(vim文本选择)
- 听起来像是Emacs中的错误,而不是使用空格的原因…
- "不同的程序员可以根据自己的需要使用不同的制表符显示大小。"代码通常被包装在特定的列中,更改制表符的大小会使其中断。还有一些工具没有更改制表宽度的选项,您是否尝试过在一个文件上运行git diff,该文件的制表位大小为4甚至2?看起来很糟糕。
- "与其他语言的一致性,所以你不必设置你的编辑器使用,例如用于C++/Java的标签和Python的空格。"还有什么阻止你在其他语言中使用空格?makefiles是我能给出的唯一一个需要标签的例子,而这并不是将其他一切切换到标签的原因。
- "减少缩进、取消缩进和遍历缩进所需的击键次数。(即使您的IDE有一些空间缩进的巧妙性,它也永远不会像标签那样好。)"胡说,如果您使用正确配置的好编辑器,这不是问题。我使用vim的空间,没有任何问题。
- a)我不在特定的列中包装代码,而且我认为没有很多人这样做。在现代世界,我们不在80宽的终端上工作。b)理智妨碍了我在其他语言中使用空格,c)"正确配置的好编辑器"不存在。认真地给我看一个编辑器,如果你点击一个4空间缩进的中间,它会自动跳到一个4空间边界,并且一个左键或右键按下会跳4个空间。不存在。
- @你有没有什么理由不把代码当作"ASCII艺术"?有时垂直对齐更美观,它可以帮助读者更容易地看到不同代码行之间的平行线(例如,每个列表元素垂直和水平排列的二维嵌套列表)。
我最近看到一篇题为python:Myths about indentation的文章,讨论了这个问题和相关的问题。本文有充分的理由建议在编写python代码时使用空格,但肯定有分歧的余地。
我相信大多数Python程序员只使用空格是真的。
- 你好。链接是否正常工作?似乎不适合我。想读一下吗
- @Greatcoder:我修复了一个archive.org副本的链接。
使用一个编辑器,当您按tab键时,可以将空格插入到制表位,而不是插入 字符。然后忘记它。
我在使用空格而不是制表符时遇到的唯一不便是,您不能轻易删除缩进级别;您必须删除四个空格而不是一个制表符。
- 许多编辑器都有"unindent"按键,如shift tab或ctrl-[。有些编辑器甚至可以在行的右侧按Backspace键删除4个空格。
- 问题是它是一些编辑。大多数编辑不会。
- 大多数为编程而设计的编辑器都会。如果您的编辑器缺少此功能,那么它可能会缺少许多其他有用的功能。
- 你在用什么?VIM/GVIM当然可以。Emacs也是如此。我相信textpad和notepad++也可以。如果你的锤子坏了,别怪钉子。
- 如果编辑器不能进行智能缩进和取消缩进,那么它可能更不可能安全地处理制表符,特别是在源文件混合了制表符和空格的情况下。
您可以混合制表符和空格…但是一个标签被认为是8个空格的缩进,所以除非您的编辑器将标签设置为8个空格,否则在混合它们时会遇到麻烦。
- Python3不允许您混合。
- 从技术上讲,在python 2中,它不是"被认为是与8个空格相同的缩进",而是被认为是足以移动到下一个制表位(定义为8个空格的倍数)的空间。
- 另请参见python对要缩进的制表符和空格的解释。
标签规则。嵌套循环的参数相同,您希望将外部循环"返回"1级。提示:如果要将旧的充满空格的python代码转换为制表符,请使用http://www.textpad.com/add ons/上作为可执行文件提供的tabout实用程序。
- 制表符不规则是因为:在某些情况下,您需要精确地将一些代码缩进到一个空格精度。在这种情况下,要么只使用制表符就不允许实现这一点,要么使用制表符和空格就违反了不混合两者的硬规则。
- 埃里克:在任何情况下都不需要精确地对齐代码(PEP-8无论如何都建议不要这样做)。因此,它实际上是标签的易用性和省时性与空间的完美对齐能力之间的权衡。
- 道格拉斯·克罗克福德不同意(08分49秒)。
我非常强烈地感觉到,无论历史惯例如何,制表符只是一个更好的选择,应该在以后编写的每一行Python代码中替换空格。就像踢出一个无能的暴君。我的理由是:作为核心价值的简单性。使用两个或四个字符来完成一个的语义任务?在我看来,没有比传统更合理的理由了。
当您在文件中混合了缩进时,会出现编辑器到编辑器的错误。这产生如下:一个代码块用4个空格缩进,然后一个缩进级别"in",用制表符缩进。现在做这个的异教徒(混合标签和空格)有了它,所以他的标签也是4个空格,所以他看不到问题,而python看不到问题。
现在我们的受害者来晚了,他的标签设置为8个空格。现在,我们的受害者认为代码看起来很糟糕,并通过删除一个缩进级别来修复它,这使得代码看起来仍然是两个缩进级别,但实际上是一个级别。在这一点上,所有的地狱都被释放了。
这里的教训是,您永远不应该混合制表符和空格。如果您坚持这样做,那么很容易将代码重新插入空格或制表符中,而不管您个人使用的是哪个。确保不混合制表符和空格的最佳方法是始终使用python和-tt,这在制表符和空格混合时会产生错误。
至于制表符和空格,我个人使用制表符来区分缩进和外观-当代码使用制表符缩进时,更改代码外观比使用空格缩进要容易得多。我知道这与99%的Python程序员所做的相反,但这是我个人的偏好,而且在任何情况下都很容易将选项卡文件转换为间隔文件。相反的情况并不总是正确的,因为你可以不小心在字符串中打出4个空格,等等。
- 所以,除非混合标签和空格(我同意这是坏的),那么除了约定没有其他原因?
- 公约还包括代码交换的可能性。
当我第一次学习Python时,我对重要的空白概念有点反感,因为使用它的大多数语言都是不灵活的。也就是说,我对Python理解各种缩进样式的能力印象深刻。在考虑新项目使用什么样式时,我认为记住两件事很重要。
首先,了解Python如何解释缩进很重要。BryanOakley提到了在使用标签时一次出错的可能性,但是在默认的解释器设置中,这实际上是不可能的。从O'ReillyMedia学习python有更好的解释。
基本上,有一个定义选项卡宽度的变量(可以通过在源文件顶部包含注释来更改该变量)。当python遇到制表符时,它会增加到下一个制表符宽度倍数的缩进距离。因此,如果在文件左侧输入一个空格,后跟一个制表符,则制表符宽度的下一个倍数为8。如果一个标签本身被输入,同样的事情也会发生。
这样,如果编辑器配置正确,使用制表符,甚至混合制表符和空格都是安全的。只要将编辑器的制表位设置为与python制表位宽度声明相同的宽度(如果没有,则设置为8)。除非在文件中指定制表宽度,否则使用制表宽度不是8个空格的编辑器通常是一个坏主意。
第二,Python的许多语法设计都是为了鼓励同一项目中的程序员之间的代码可读性和一致的风格。也就是说,对于任何一个特定的项目来说,问题变成了什么让项目工作人员最容易阅读代码。当然,保持一致的缩进样式是一个好主意,但是根据项目使用的平台和编辑器,不同的样式可能对不同的项目有意义。如果没有令人信服的理由不遵守PEP 8,那么这样做是有意义的,因为它将符合人们的期望。
我遇到过成功地混合使用制表符和空格的项目。基本上,空格用于缩进小部分,其中缩进部分中的事实相对不重要;而制表符用于吸引读者对大型结构特征的注意。例如,类从一个选项卡开始,该选项卡使用两个空格对函数内部进行简单的条件检查。
当处理大的文本块缩进多个级别时,选项卡也很有用。当您退出3-4级缩进时,使用适当的制表符要比使用适当数量的空格容易得多。如果项目不使用PEP 8推荐的样式,最好将样式指南写入某个文件中的某个位置,以便缩进模式保持一致,并且其他人可以明确地阅读如何将其编辑器配置为匹配。
另外,python 2.x还可以选择-t来发出关于混合制表符和空格的警告,而-tt来发出错误。这只适用于同一范围内的混合选项卡和空格。python 3假设-tt,据我所知,无法禁用该检查。
- 您使用PEP8作为证明制表符而不是空格的理由…但即使是PEP8也表明使用空格是首选。已经使用制表符的代码应该继续使用制表符。所以如果我用标签开始一个项目…
我主要是C++程序员,但有时我的项目包括少量的Python。我使用标签来缩进我的C++代码。这意味着我有三个选择:
在Python中使用C++中的制表符和空格。这允许我的C++文件保持原样,我遵循PEP-8建议,但是在我的项目中我不一致。
更改我的C++代码以使用空格。这允许我的项目中的所有文件都是一致的,并且我遵循了PEP-8建议,但要求我返回并更改所有的C++文件。我认为这是件坏事,因为我更喜欢标签。
在我的C++代码和Python代码中使用标签。这使我的整个项目一致,并允许我使用我喜欢的缩进样式:制表符。缺点是我没有遵守PEP-8标准。
对于我的项目,我通常使用选项3。
经验和PEP-8都清楚地得出结论,应避免混合空间和TABs。如果你想混合使用它们,你必须在IDE中可视化空白——但是你失去了Python缩进的优势,使得范围很容易被看到。在IDE中可视化空白会使显示混乱。
如果它是制表符或空格,那么它必须是空格,原因很简单:可以切换几乎所有的IDE和文本编辑器,以自动用空格替换制表符,但事实并非如此。
尽管有IDE可以自动将行中的前导空格转换为制表符,但这最终会导致制表符和空格的混合。考虑多行语句,例如带有大量参数或文档字符串的函数调用。虽然"ascii-art"也要避免,但很容易发生的意外是,在前面的标签后面留下了一个空格。
其他答案带来了几个支持标签的论点:
- 打击TAB更有效。当然,这是正确的,但是当按下tab键时,所有文本编辑器都允许立即插入所需的空格数。
- 当只需要删除一个制表符而不是2/3/4/8空格时,缩进/取消缩进更容易。是的,但大多数文本编辑器都允许自动执行此操作:块选择、缩进/取消缩进是编程编辑器的基本功能,如注释/取消注释。如果文本编辑器没有实现这一点,那么它至少应该有一个易于使用的宏功能,用它可以实现相同的事情。
- 不同的程序员喜欢不同的缩进宽度。这是事实,而且只使用TAB的明显优势。问题在于与其他个人和/或团队的互动。为了在现实世界中发挥作用,每个人都必须同意只使用TABs。既然这还没有发生,它也不会起作用。在一个真实的场景中,有一系列的编码指导原则,不管怎样,项目都同意,而且缩进方法当然是其中之一——即使在其他编程语言中,在视觉层面上的含义是"唯一的"。
imho,这里缺少大多数(如果不是全部)答案的主要点是团队或个人之间的交互,特别是在参与者列表一开始就不知道的情况下。当代码满足代码时,要么所有人都必须使用制表符,要么所有人都必须使用空格。如果没有最终遇到功能问题,就不能将其混合。人并不完美。工具并不完美。这就是为什么imho我们根本不应该使用TAB。
没有格雷格已经在他的答案中提供的链接,答案是不完整的:python:关于缩进的神话
每个人对应该缩进多少代码都有不同的偏好。假设您与某人共享代码,他或她对缩进有不同的偏好。如果缩进是在制表符中,您的朋友总是可以在其编辑器设置中更改制表符宽度。但是,如果缩进是在空格中,那么如果您的朋友想要将其设置为他们的首选项,那么他/她实际上必须更改源代码。然后,当你得到你朋友的改变,你可以决定改变它回到你的喜好。在这种情况下,您要么要处理前后更改缩进级别的繁琐问题,要么一个人必须在缩进级别中采用另一个人的偏好。如果您和您的朋友都使用制表符,那么您有不同的首选项是没有问题的,因为您可以在代码保持不变的同时看到不同的缩进级别。这就是为什么在我看来,在所有编程语言中,制表符都比缩进空格好。
- 不过,正如您所看到的,python指导原则声明将使用空格,而不是制表符。
- 他们有什么理由提出这个建议吗?这些"编码风格"首选项中的大多数都是完全任意的,只是为了确保项目与多个开发人员的一致性。但是,如果我们都使用制表符,就不需要强制要求缩进是特定数量的空格。每个人都可以设置选项卡,使其看起来像您想要的任意多个空间。
- @不,Pep-8建议在标签上使用空格,它只说明标签和空格不应该混合使用。PEP-8也不是"Python指南",它是Python标准库的风格指南,而不是像人们想象的那样,每个人都应该遵循的一般风格指南。
- @德米西,嗯,是真是假。事实上,PEP-8并没有说你必须使用空格,而不是制表符。但它也清楚地指出,"对于新项目来说,只有空格被强烈推荐而不是制表符。"这可以说与"使用空格"是一样的。:)
- @Kigurai这也是一个事实,它是Python标准库样式指南,并不打算被其他项目所遵循。
- @德米西,真的。但是我想标准库的指导方针确实有点重要。
使用空格而不是制表符的问题是文件大小变得非常大…例如,在将空间替换为选项卡时,500 KB的缩进文件空间可以减少到200 KB,这就是为什么我总是使用选项卡的原因。
较小的文件大小意味着更快的加载、编译、执行(在某些情况下)等。
对我来说,使用空格没有意义,但是如果有人使用的编辑器与制表符有问题,那么他们可以将" "替换为""或""或其他内容…
- 空间的另一个问题是不能像标签那样快速调整…所以,如果你想查看每个标签有2,4,8个空格的文件-这有助于某些视觉缺陷的人-你可以很容易做到,但你不能用空格…
- 我以前从来没有听过这种说法。感谢您共享文件大小结果比较。
有一种情况是选项卡根本不起作用,即:根据您使用的编码样式,您可能需要将一些代码行缩进到一个空格精度,即:
1 2 3
| def foobar():
x = some_call(arg1,
arg2) |
在这种情况下,使用纯制表符根本不起作用;使用制表符进行主缩进和使用空格进行子缩进将起作用,但这将违反不混合这两者的硬规则。
但是,在使用避免类似于上述代码示例的情况的编码样式/约定文档时,情况并非如此。
- 我会像这样混合标签和空格:pastebin.com/5cxer7e1。在给定的行中,当空格出现在制表符之前,或者制表符和空格在跨行中使用不一致时,混合制表符和空格通常是一个问题。在链接的示例中,制表符提供初始缩进,而空格提供对齐。
- 这是绝对可能的,但我认为这将很难说服大多数开发人员,混合空间和选项卡毕竟是好的。
- 不要这样包装参数,python不是objective-c。(是的,我知道pep-8建议这样做,但是pep-8并不完美。)通过将所有参数向下移动(第一行没有)两次缩进(以区别于只缩进一次的代码块)来避免这个问题。
- 我同意,但这已经超出了不混合的范围。
- 哎呀,不要这样做:)不要使用空格o/避免使用ASCII艺术!
除了已经列出的所有论点之外,我发现这一个相当重要(从有关缩进的神话中):
Also, tabs often get destroyed or wrongly converted during copy&paste operations, or when a piece of source code is inserted into a web page or other kind of markup code.
另一个反对标签的论点(强烈的环境特定性)是,它们有时在电话键盘上丢失。在可能的情况下,可以通过安装备用键盘来解决这一问题。
关于标签的一个论点,似乎还没有人提到,1个标签是1个字符(文件中是0x09,1个字节),而4个空格是4个字符(文件中是4乘以0x20,4个字节);因此,使用空格会导致4倍的空间浪费。
为了总结这个不连贯的论点列表,我想在第7012期中引用蒂姆·彼得斯的回答:标签比缩进的空格更好:
The Python"spaces only" standard is for
distributed code. Years of early experience taught us beyond doubt that
tabs caused endless problems for shared code (...)
- 制表符的大小是一个弱参数。计算机足够快,磁盘足够大。选项卡最有力的参数之一是,每个开发人员都可以选择他们喜欢的缩进。
- 我从来没有见过网站/程序的"销毁"标签,如果是,它不是用来处理代码的。如果您在网站上发布代码,它通常会转换换行符,并显示为预先格式化的文本。制表符是在专用字符之外缩进代码的最佳方法。
我认为有一个解决方案可以同时拥有:
与PEP-8的兼容性和使用空间
使用制表符而不是4个空格的便利性
在记事本+中,转到"首选项"-->"选项卡设置",然后从右边的列表中选择"python"。然后确保"制表符大小:4",并选中"用空格替换[制表符]"。在这种情况下,您可以简单地使用tab键进行缩进,但记事本++实际上会将其转换为4个空格。
- 是的,现在按"删除"时会发生什么?或者点击一个标识的中间。还是使用箭头键在缩进中左右导航?
- 你是对的。这可能是个问题。
How does that make a difference?
默认情况下,某些编辑器配置为用一组空格字符替换单个制表符,但有些则不是。如果每个人都使用空格,可以忽略默认编辑器设置中的差异。
Are there other reasons why one would use spaces instead of tabs for Python? Or is it simply not true?
是的,在我面前的许多答案都指出了其他的正当理由。"然而,PEP-8"说的不是这些原因之一。这源于一个自生自灭的神话,即PEP-8是所有Python代码的编码标准,而实际上它只是标准的一组Python库的编码标准。有人声称PEP-8被广泛接受,也有人声称大多数Python程序员使用空格而不是制表符。我想要求这些主张的证据,因为这个网站上的投票数清楚地表明标签是群众的首选。我觉得很不幸的是你接受了"pep8 says so"作为你问题的答案,而事实上还有很多其他的答案可以解释空格和制表符的相对优缺点。
Should I switch my editor to insert spaces instead of tabs right away or keep on going like I used to?
这取决于,最后一个问题的答案是,我认为我可以在哪里为这个线程添加一些值。imho,无论使用何种语言,要使用的最佳编码标准取决于您所处的环境:
- 如果您开始使用已经存在的代码库:不要太困难,请遵循现有的编码标准
- 如果一个团队从头开始一个新项目:讨论,在开始时作为一个团队决定一个编码标准,并坚持下去
- 如果你要独自去:做任何能让你感到最快乐和最有成效的事情
那么你处于哪种情况下呢?
最后,为了明确我的立场,对于我自己的单独项目,我使用标签,因为标签对我更有意义,而且我对标签更有效率。
这是截至2017年7月的PEP 8:
这句话似乎没有其他选择的余地。
但这不仅仅是Pep 8告诉我们的,几句话之后:
在上面,第一条语句表示对空格的偏好,第二条语句承认存在用制表符缩进的代码,并且这种偏好也适用于某些编码人员。
因此:PEP 8具有制表位缩进公差。但它不允许制表符和空格混合缩进,因为缩进本身是强制的,所以可以理解。
值得一提的是,Google的python编码风格也遵循4空间规则。
还有其他各种各样的论点和理由支持制表符或4-空格。
如果您在执行PEP 8的公司工作,或者定期与遵循PEP 8的其他人共享您的代码,那么常识要求4个空格。我是(也许,)用于C/C++的选项卡。但是有了适当的IDE,差异就变得很小了。
使用空格代替制表符,唯一的原因是你会赚更多的钱:)
参考:使用空格的开发人员比使用制表符的开发人员赚更多的钱(StackOverflowBlogPost)。
- 你假设一个因果关系,而这可能只是一个相关性。使用空间的开发人员可能有另一种思维方式,使他们在某种程度上更有效率,赚更多的钱,这使他们更喜欢空间。所以如果你使用标签并考虑这个选项,你的工资可能不会上涨。另一方面,如果有人在面试中问这个问题,如果你认为这会使你更有资格胜任这份工作,不要犹豫说你使用了空格。这意味着当你得到工作的时候你必须使用它们。
- 投反对票的人有一个严重的仇恨问题,你怎么能不同意开玩笑呢?D
因此,我在这里阅读所有的回答,想知道我如何能够遵守PEP-8,而不必反复敲打退格键来消除缩进,我看着我的罗技游戏键盘,它所有的华丽宏按钮和一个灯泡都在我的脑海中亮着。
我打开Logitech的软件,为选项卡按钮旁边的按钮定义了几个宏,问题就解决了。
一个按钮添加四个空格,另一个按钮进行四次退格。太神了。真是太棒了。用我的小指也很容易按下按钮。
看,看看这个:""<--四个空格!只需按一下按钮!如果我能给你看退格,我也会这样做。去买一个Logitech G105键盘,你所有的问题都会消失!
- 为什么堆栈溢出!你没有显示所有的空间!因此,必须将所有空白区域缩小到最小值,以节省存储空间。
我认为使用空格的一个主要好处是,您消除了在大量外部工具中呈现源代码的可变性,这些外部工具必须与源代码进行交互,而不是选择编辑器以及它们在其中配置的任何设置。
作为一些具体的例子,可以考虑在Visual Studio代码的工具提示中,或者在比较或WinMerge等diff工具中,在性能或代码覆盖工具等工具中呈现python docstring。基本上,所有这些不同的其他接口工具对于如何解释选项卡都有不同的设置,而且有时会很烦人。在你可能潜入或潜入的工具集中,迷失方向去发现完全不同的东西或被推离屏幕。
简言之,您在源代码中定义了对齐,而不是为您的工具库中的工具套件制定统一的配置。由于字体的定义,而不是第三方的制表符呈现实现/配置,因此空间严格解释为单空间字体,以便在整个工具范围内实现可靠和一致的对齐。
另一个角度是复制前导标签源以在终端上运行,在终端上标签字符可能触发无意中完成的标签。例如,如果复制以下python源代码(用作缩进的制表符),
1 2 3 4
| cmd_create_db = '''CREATE TABLE test (
Col1 INTEGER,
Col2 INTEGER,
Col3 TEXT)''' |
您可能会看到如下内容(在Visual Studio代码的集成终端上看到)…
1 2 3 4 5 6 7 8 9
| >>> cmd_create_db = '''CREATE TABLE test (
... .DS_StoreCol1 INTEGER,
... .DS_StoreCol2 INTEGER,
... .DS_StoreCol3 TEXT)'''
>>> cmd_create_db
'CREATE TABLE test (
.DS_StoreCol1 INTEGER,
.DS_StoreCol2 INTEGER,
.DS_StoreCol3 TEXT)' |
(顺便说一句:我想知道,这种对工具一致性的观察是否是一个敏锐的开发人员的一种歧视性思维的标志,他们希望命令世界,这可能暗示在堆栈溢出中发现的工资差异。)
我喜欢标签,但它与我喜欢的另一个规则不兼容:80列的限制。
如果选择4个空格制表符并插入10个制表符,则剩余40个字符以满足80列的限制。如果另一个编码人员喜欢8个空格制表符,则同一行将显示为120个字符长,并且不会显示为有效的80列行!
如果要定义80列的限制,则必须为选项卡选择长度。在这种情况下,有x个空格或长度为x的制表符并不能真正起作用。
编辑:相关线程:使用制表符而不是空格时是否保持最大行长度?
我刚开始,但我发现使用制表符比使用空格容易得多,而且不理解PEP-8只提倡空格。Sublime Text 2可以很好地可视化带有灰白色垂直虚线的选项卡,虽然有一些情况是我混合了一两个空格来排列列表或字典的元素,但我没有经历过这样一种情况,那将是有害的事情。
人们将在同一代码上使用不同的编辑器。这些编辑器将以不同的方式在屏幕上表示一个选项卡。如果您使用的编辑器将选项卡表示为4个空格,如果您使用"\t "缩进第一行,使用"\t\t"缩进第二行,则它们看起来像是处于相同的缩进级别:8个空格。
Python解释器不知道您的编辑器,它必须将选项卡解释为一定量的缩进。实际上,它将选项卡解释为8个空格,因此它将看到不同于预期的缩进级别:第一行12个空格,第二行16个空格。你被烤了。
- 听起来像个糟糕的编辑。哪个编辑会这么做?为什么不在不同的位置显示这些标签(4个空格位置上1个标签,8个空格位置上2个标签)?
- 在我看来,这是这一页中最明智的评论!!!!为什么是最后一个????如果我能再投一次赞成票,我肯定会投的!
我最近从标签切换到空格,以符合PEP 8。
我以前喜欢标签有两个原因:
使用制表符,每个人都可以看到其缩进级别为选择;只使用右边的空格和左边的制表符。
制作想要的标签非常糟糕
…但当我意识到Pep 8变得多么重要后,我还是换了。如我所见,标签上方的空格的主要价值是简单性——你所看到的就是你所拥有的。以及PEP 8合规性。我想出了一个VIM规则,可以打开python文件的空间,留下makefile的标签。
最近不得不处理混合了空格和制表符的现有代码,这真是令人困惑。
当你混合的时候(你真的不应该这样做,但不幸的是它确实存在),看起来"1 tab==1 indent level"不是真的。
以下面的示例(使用python 2.7进行了尝试):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # Mostly use spaces
class TestClass:
def __init__(self):
self.total = 0
def add(self, x):
# 8 spaces at the start of the following line:
self.total += x
# SO automatically uses spaces, but use tabs in the next 2 lines.
# One tab at the start of the following line:
if self.total > 10:
# Two tabs at the start of the following line:
print"Greater than 10!"
# Now use spaces again.
return self.total
tc = TestClass()
print"Total: %d" % (tc.add(5),)
print"Total: %d" % (tc.add(5),)
print"Total: %d" % (tc.add(5),) |
这里,在def add(...)之前有4个空格(1个识别级别),在self.total += x之前有8个空格(2个缩进级别),在if self.total > 10之前有一个选项卡。
但是,由于这段代码可以工作,所以单个选项卡的行为就像两个缩进级别。相反,如果用4个空格(单个缩进级别,即类中的def所在的位置)替换所有选项卡,则在return之前会出现意外的缩进错误,因为它不再位于def块中。
对于将选项卡显示为4个字符的编辑器来说,这真是令人困惑。当然,可以对其进行配置,但这也会影响源代码查看器(如Github等),因为在这些浏览器中,配置起来并不一定容易(或者可以立即看到您需要这样做)。
选项卡V.S.空间行为始终取决于编辑器:
- 如果您的编辑器在每次按Tab键时自动插入空格,它将插入正确数量的空格,以便另一个编辑器显示完全相同的样式。
- 如果您的编辑器不使用制表符,则始终有可能不会注意到使用空格而不是制表符的行(尤其是在项目中使用其他编辑器时)。
两者都有各自的缺点。底线是在制表符和空格之间需要有一个任意的选择,但是它们不应该混合在一起。因为您永远不知道代码以后将如何读取和使用,所以有一个影响所有Python编码人员的约定是很好的。PEP-8说的是空格,就这样吧。
重要的是不要用Java的方式去做:
Four spaces should be used as the unit of indentation. The exact
construction of the indentation (spaces vs. tabs) is unspecified. Tabs
must be set exactly every 8 spaces (not 4).
对。。。Java世界中1个标签= 2个缩进级别!谢天谢地,它在编译方面没有同样的意义。
- python 2并没有将选项卡视为两个缩进级别(至少,不是直接的)。相反,在这种情况下,单个选项卡转换为8个空格,对应于两个缩进级别。(通常,选项卡扩展为多个空格,使当前缩进量达到8的倍数;请参见docs.python.org/2.7/reference/lexical_analysis.html indentat&zwnj;&8203;ion)。
(对某些人来说)更模糊标签方面的论点:我被告知标签对盲人的屏幕阅读器更有效。
我使用两个空格缩进和一个编辑器(KWRITE),当我按Tab键时,它插入空格而不是制表符。