python中一般使用几个空格表示缩进_为什么Python pep-8强烈建议使用标签上的空格来缩进?...

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

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

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

quamrana asked 2019-06-09T21:01:48Z

16个解决方案

97 votes

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

缩进Python最流行的方法是仅使用空格。

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

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

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

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

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

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

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

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

answered 2019-06-09T21:03:01Z

75 votes

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

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

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

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

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

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

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

nigratruo answered 2019-06-09T21:04:09Z

36 votes

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

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

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

Soviut answered 2019-06-09T21:04:48Z

27 votes

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

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

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

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

S.Lott answered 2019-06-09T21:05:32Z

24 votes

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

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

Thomas Wouters answered 2019-06-09T21:06:03Z

22 votes

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

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

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

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

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

def foo():

x = some_function_with_lots_of_args(foo, bar, baz,

xyzzy, blah)

如果使用制表符,则无法在编辑器中使用不同制表位的人对齐此选项,而不会混合使用空格和制表符。 这有效地杀死了上述好处。

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

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

Brian answered 2019-06-09T21:07:24Z

11 votes

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

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

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

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

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

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

Thane Brimhall answered 2019-06-09T21:08:22Z

7 votes

这个问题的答案是: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接受它,那么就没有问题。

我们应该找到问题的双赢解决方案。

quamrana answered 2019-06-09T21:10:29Z

3 votes

JWZ最好说:

当[人们]正在阅读代码时,以及当他们编写新代码时,他们关心当新范围(或sexpr或其他)打开时代码倾向于缩进的屏幕列数量......

...我的观点是,解决技术问题的最佳方法是强制ASCII#9 TAB字符永远不会出现在磁盘文件中:编程编辑器将TAB扩展到适当数量的空格,然后再将这些行写入磁盘。..

...这假设你从不在实际重要的地方使用标签,比如字符串或字符常量,但我从不这样做:当重要的是它是一个标签时,我总是使用'\ t'代替。

Mark Cidade answered 2019-06-09T21:11:14Z

3 votes

我总是在代码中使用制表符。 也就是说,我最近找到了使用空间的理由:在我的诺基亚N900互联网平板电脑上进行开发时,我现在有一个没有标签键的键盘。 这迫使我复制并粘贴标签或用空格重写我的代码。我和其他手机遇到了同样的问题。 当然,这不是Python的标准用法,但需要记住一些事项。

Skyler answered 2019-06-09T21:11:38Z

1 votes

由于python依赖于缩进以识别程序结构,因此需要一种明确的识别标识的方法。 这是选择空格或制表符的原因。

然而,python也有一个强有力的哲学,只有一种方法来做事,因此应该有一种方法来做缩进的官方建议。

空格和制表符都是编辑器作为缩进处理的独特挑战。 在编辑器甚至用户设置中,标签本身的处理并不统一。 由于空间不可配置,因此它们提供了更合乎逻辑的选择,因为它们保证结果在任何地方都是相同的。

Florian Bösch answered 2019-06-09T21:12:17Z

0 votes

我可以告诉标签上的空格最重要的优点是许多程序员和项目使用一定数量的列作为源代码,如果有人提交更改并将其tabstop设置为2个空格,并且项目使用4个空格作为 tabstop长线对于其他人的编辑窗口来说太长了。 我同意标签更容易使用,但我认为空间更容易协作,这对像Python这样的大型开源项目很重要。

sirwart answered 2019-06-09T21:12:41Z

0 votes

你可以吃蛋糕然后吃。 设置编辑器以自动将制表符展开到空格中。

(那将是Vim中的:set expandtab。)

Rod Daunoravicius answered 2019-06-09T21:13:12Z

-1 votes

除了已经命名的所有其他原因(一致性,从不混合空格和制表符等),我相信还有一些原因要注意4空格惯例。 这些仅适用于Python(也可能适用于缩进有意义的其他语言)。 根据个人喜好,标签在其他语言中可能更好。

如果编辑器没有显示标签(发生这种情况,具体取决于配置),另一位作者可能会认为您的代码使用了4个空格,而b / c几乎所有公共可用的Python代码都可以; 如果同一个编辑器的标签宽度为4,那么可能会发生令人讨厌的事情 - 至少,这个可怜的人会因为坚持常规而很容易避免的缩进问题而浪费时间。 所以对我来说,首要原因是要避免一致性的错误。

重新考虑哪个更好,标签或空格的问题,应该问一下标签的优点是什么; 我看过很多帖子赞美标签,但很少有令人信服的论据; 像emacs,vi(m),kate等好的编辑器......根据代码的语义做适当的缩进 - 即使没有标签; 相同的编辑器可以轻松配置为退格等。

有些人在决定代码的外观/布局时有很强的偏好; 其他人重视这种自由的一致性。 Python通过指示缩进用于块等来大大减少这种自由。这可能被视为错误或功能,但它有点选择Python。 就个人而言,我喜欢这种一致性 - 当开始编写一个新项目时,至少布局接近我习惯的,所以它很容易阅读。 几乎总是。

使用空格进行缩进允许“布局技巧”,这有助于理解代码; 这些的一些例子列在PEP8中; 例如。

foo = long_function_name(

var_one, var_two,

var_three, var_four)

# the same for lists

a_long_list = [

1,

2,

# ...

79]

# or dictionaries

a_dict = {

"a_key": "a_value",

"another_key": "another_value"}

当然,上面也可以写得很好

foo = long_function_name(

var_one, var_two,

var_three, var_four)

# the same for lists

a_long_list = [

1,

2,

# ...

79]

# or dictionaries

a_dict = {

"a_key": "a_value",

"another_key": "another_value"}

然而,后者需要更多的代码行,而有时会认为更少的行更好(b / c你在单个屏幕上得到更多)。 但是如果你喜欢对齐,那么在某种意义上,空格(最好由一个好的编辑器帮助)会给你带来比标签更多的自由。 [好吧,我猜有些编辑可以让你做同样的w /标签;) - 但是有了空格,所有的都做......

回到其他人所做的相同论点 - PEP 8指示(好的,强烈推荐)空格。 如果进入仅使用制表符的项目,当然,您别无选择。 但由于PEP 8约定的建立,几乎所有Python程序员都习惯于这种风格。 这使得在大多数程序员接受的风格上找到共识变得更加容易......并且让个人对风格达成一致可能会非常困难。

有助于实施风格的工具通常不需要额外的努力即可了解PEP 8。 这不是一个很好的理由,但让开箱即用的东西真是太好了。

Gerald Senarclens de Grancy answered 2019-06-09T21:14:44Z

-3 votes

制表符的普遍问题在于它们可以在不同的环境中以不同的方式表示。

在给定的编辑器中,选项卡可能是8个空格,也可能是2个。

在某些编辑器中,您可以控制它,而在其他编辑器中则不能。

制表符的另一个问题是它们如何在打印输出中表示。 我相信大多数打印机将标签解释为8个空格。

毫无疑问,有了空间。 一切都将按照作者的意图排列。

Benoit answered 2019-06-09T21:15:36Z

-4 votes

关于Jim和Thomas Wouters在评论中的讨论。

问题是......因为标签和空格的宽度都可以变化 - 而且由于程序员不能同意任何一个宽度 - 为什么标签应该承担责任。

我同意吉姆的观点 - 标签本身并不邪恶。 但有个问题...

通过空格,我可以控制世界上每个编辑器中“我自己的代码”的样子。 如果我使用4个空格 - 那么无论你打开我的代码是什么编辑器,它都会与左边距相同。 使用选项卡,我可以使用编辑器的选项卡宽度设置 - 即使是我自己的代码。 我不喜欢那样。

因此,即使空间确实无法保证一致性,它们也是如此 - 它们至少可以让您更好地控制您的OWN代码的外观 - 标签不能。

我认为这不是程序员编写代码的一致性 - 而是编辑器的一致性显示代码 - 空间更容易实现(和强加)。

treecoder answered 2019-06-09T21:16:35Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值