在Python中使用空格是否有任何陷阱?

时间:2009-03-12 03:50:34

标签: python whitespace

目前我从来没有遇到Python中的空白问题(虽然我只在两个项目中使用它而且我是唯一的程序员)。对于学习该语言的人来说,Python中的空格和缩进有哪些潜在的缺陷?

17 个答案:

答案 0 :(得分:11)

在一些编辑器中可能会令人困惑,其中一行用空格缩进,而下一行用缩进键缩进。这是令人困惑的,因为缩进看起来相同但会导致错误。

另外,当您复制代码时,如果您的编辑器没有缩进整个块的功能,那么修复所有缩进可能会很烦人。

但是如果有一位优秀的编辑和一些练习,这应该不是问题。我个人非常喜欢Python使用空格的方式。

答案 1 :(得分:10)

是的,有一些陷阱,但大多数时候,在实践中,它们变成了敌人windmills of the Quixotic style,即想象中的,在现实中没有什么值得担心的。

我估计一个最容易遇到的陷阱(包括确定的缓解步骤):

  1. 与他人合作a.k.a.合作

    一个。如果你有其他人因为某种原因拒绝遵守PEP 8,那么维护代码可能会变得很痛苦。一旦我向他们指出python的几乎普遍的约定是缩进级别==四个空格

    ,我在实践中从未见过这个

    湾让你工作的任何人/每个人接受约定并让他们弄清楚如何让他们的编辑器自动执行它(或者更好的是,如果你使用相同的编辑器,告诉他们如何配置它),这样复制和粘贴和东西只是工作

  2. 如果你当前首选的编辑不是python友好的话,不得不投资一个“体面的”编辑器而不是你当前首选的编辑器 - 不是真正的陷阱,更多的投资要求避免与复制粘贴,重新分解等相关的其他陷阱停止使用记事本,你会在早上感谢自己。

    一个。在了解python

    的编辑器下,编辑代码的效率会更高

    湾大多数现代代码编辑器都能很好地处理python。我自己更喜欢GNU Emacs,最近的版本提供了出色的python-mode开箱即用支持。有很多other editors to explore,包括许多免费替代品和IDEs

    ℃。 python本身是一个开箱即用的“智能”python编辑器idle。如果您不熟悉,请查看它,因为它可能已经在您的python安装中提供,甚至可能比您当前的编辑器更好地支持pythonPyCrust是在python中实现的python编辑器的另一个选项,它是wxPython的一部分。

  3. 包含python的一些代码生成或模板环境(想想HTML生成或python CGI / WSGI应用程序)可能有怪癖

    一个。其中大部分,如果他们触摸python,已经采取措施将python的性质最小化为一个问题,但它仍然会偶尔出现。

    湾如果您遇到这种情况,请熟悉框架作者已采取的步骤,以尽量减少影响,并阅读他们的建议(,是的,如果在他们的项目中遇到过,他们会有一些) ,并且很容易避免与python相关的陷阱。

答案 2 :(得分:2)

这让我暂时远离Python。来自强大的C背景,我觉得我在没有安全带的情况下开车。

当我尝试使用样板文件(经常使用的类)填充编辑器中的代码段库时,这种情况更加恶化。我通过实例学到了最好的东西,所以我尽可能地抓住了许多有趣的片段,目的是在学习的同时编写一个有用的程序。

在我养成了重新格式化我借来的东西的习惯之后,它并没有那么糟糕。但它仍然感觉很尴尬。我不得不习惯一种动态类型语言PLUS缩进来控制我的代码。

这对我来说是一次飞跃:)

答案 3 :(得分:2)

当我查看C和Java代码时,它总是很好地缩进。

始终。奈斯利。齿痕。

显然,C和Java人员花了很多时间来确保他们的空白正确。

Python程序员也是如此。

答案 4 :(得分:1)

空格块分隔符强制执行一定数量的代码格式化,这似乎会激怒一些程序员。我们店里的一些人似乎态度过于忙碌,或者无法注意格式化标准,而且一种强迫它的语言会让他们生气。当其他人不遵循将花括号放在新线上的相同模式时,有时同样的人会抱怨;)

我发现来自网络的Python代码更常见“可读”,因为这种次要的格式化要求已经到位。 IMO,这个要求是一个非常有用的功能。

IIRC,Haskell,OCaml(#light)和F#是否也以同样的方式使用空格?出于某种原因,我没有看到任何关于这些语言的抱怨。

答案 5 :(得分:1)

很久以前,在很远的地方和环境中,有些语言(如RPG)依赖于打卡的列结构。这是一个繁琐且烦人的系统,并导致许多错误,而BASIC,pascal等新语言的设计没有这种依赖性。

一代程序员接受了这些语言的培训,并一再告诉他们,任何地方放任何东西的自由都是新语言的一个很好的特点,他们应该感激不尽。多年来,自由被使用,滥用和校准(参见IOCC)。

现在钟摆已经开始回转,但很多人仍然记得强迫布局在某种程度上是模糊的,并且抵制它。

恕我直言,要做的就是按照自己的条件使用语言,而不是因为口味极其简陋的战斗。

答案 6 :(得分:1)

有些人说他们不喜欢python缩进,因为它可能会导致错误,如果标签和空格混合,这将非常难以检测到。例如:

1 if needFrobnicating:
2    frobnicate()
3 update()

根据标签宽度,第3行可能与第2行或封闭块位于同一个块中。这不会导致运行时或编译错误,但程序会做出意想不到的事情。

虽然我在python中编程了10年,但从来没有看到混合制表符和空格引起的错误

答案 7 :(得分:1)

陷阱

  • 在忽略缩进的网站上发布代码片段可能很烦人。

  • 很难看出多行匿名函数(lambdas)如何适应语言的语法。

  • 很难将Python嵌入到HTML文件中,以便以PHP或C#嵌入PHP或ASP.NET页面的方式制作模板。但无论如何,这不一定是设计模板的最佳方式。

  • 如果您的编辑器没有用于块缩进和outdent的合理命令,则重新调整代码将非常繁琐。

优点

  • 迫使懒惰的程序员生成清晰的代码。我已经看过括号语言代码的例子,我不得不花费数小时重新格式化才能阅读它...

  • Python程序员不需要花费数小时来讨论大括号是应该放在K& R样式行的末尾还是单独使用Microsoft样式的行。

  • 释放大括号字符以用于字典和集合表达式。

  • 自动清晰易读

答案 8 :(得分:1)

当python程序员不遵循PEP 8中定义的“每个缩进级别使用4个空格”的通用约定时。 (如果你是一个python程序员而没有阅读它,请这样做

然后你会遇到复制粘贴问题。

答案 9 :(得分:1)

选择一位优秀的编辑。您需要以下功能:

  1. 模仿最后一个缩进行的自动缩进
  2. 您可以控制的自动缩进(制表符与空格)
  3. 显示空白字符
  4. 加载文件时检测和模仿空白惯例
  5. 例如,Vim让我突出显示这些设置的标签:

    set list
    set listchars=tab:\|_
    highlight SpecialKey ctermbg=Red guibg=Red
    highlight SpecialKey ctermfg=White guifg=White
    

    可以随时使用以下方式关闭:

    set nolist
    

    IMO,我不喜欢将标签转换为空格的编辑器设置,反之亦然,因为你最终会混合使用标签和空格,这可能很讨厌。

答案 10 :(得分:1)

我曾经认为空白问题只是一个习惯它的问题。

有人指出了Python缩进的一些严重缺陷,我认为它们非常有效,而且对这些缺陷的一些潜意识理解使得有经验的程序对整个事情有所了解: -

  • 剪切和粘贴不再起作用了!您无法从一个应用程序中删除锅炉板代码并将其放入另一个应用程序中。
  • 你的编辑无力帮助你。对于C / Jave等,“官方”花括号缩进有两件事,以及“非官方”的空格缩进。大多数编辑都能够重新格式化白色空格缩进以匹配大括号嵌套 - 这为您提供了一个字符串视觉线索,如果缩进不符合您的预期,则会出现错误。使用蟒蛇“空间是语法”范例,你的编辑无法帮助你。
  • 将另一个条件引入已经复杂的逻辑中的痛苦。如果那么将另一个添加到现有条件中涉及许多愚蠢的错误倾向于在多行上插入空格。
  • 重构是一场噩梦。在你的类周围移动代码块是如此痛苦,更容易忍受“错误的”类结构,而不是将其重构为更好的类结构。

答案 11 :(得分:1)

如果你使用Eclipse作为你的IDE,你应该看看PyDev;它自动处理压痕和间距。您可以从混合间距源复制粘贴,它将为您转换它们。自从我开始学习这门语言以来,我从来没有考虑过间距。

这真的不是问题;理智的程序员无论如何都要缩进。使用Python,你只需要做你一直做的事情,减去必须输入和匹配大括号。

答案 12 :(得分:0)

不,我会说这是我无法找到的一件事。是的,这无疑让一些人感到恼火,但那只是因为他们对格式化的风格有不同的习惯。早点学习,它会坚持下去。 看看我们对C,Cpp,Java等语言的风格问题进行了多少次讨论。你没有看到那些(无用的,毫无疑问)关于Python,F77等语言的讨论,以及这里提到的具有“固定”格式风格的其他语言。

唯一可变的是空格与制表符(可以通过任何好的编辑器稍微改变),以及空格选项卡占用的数量(可以使用任何好的编辑器轻松更改)。瞧!风格讨论完成。

现在我可以做一些有用的事情:)

答案 13 :(得分:0)

我作为初学者遇到的一个缺点是忘记在编辑器中设置softtabs给我带来了很多麻烦。

但是经过一年严肃的语言使用后,我再也无法用其他任何语言编写糟糕的缩进代码了。

答案 14 :(得分:0)

如果您使用emacs,请将硬标签长度设置为8,将软标签长度设置为4.这样您就可以更改任何无关的标签字符。您应该始终使用4个空格而不是标签。

答案 15 :(得分:0)

我遇到的唯一麻烦就是在我使用我编写的代码之前遇到的轻微烦恼,我决定是否喜欢标签或空格,或者从网站剪切和发布代码。

我认为现在大多数体面的编辑都有一个转换标签到空格和后退选项。 Textmate当然可以。

除此之外,缩进从未给我带来任何麻烦。

答案 16 :(得分:0)

问题在于,在Python中,如果使用空格来缩进文件的一个区域中的基本块,并在另一个区域中缩进选项卡,则会出现运行时错误。这与C中的分号完全不同。

这不是一个真正的编程问题,但是,是吗?