在Python中,空格具有特殊的意义,代码块由缩进定义。
此外,Guido van Rossum建议每个缩进级别使用四个空格(参见PEP 8:Python代码风格指南)。
那么,为什么没有要求每个缩进级别都必须使用恰好四个空格呢?是否存在任何技术原因?
似乎可以使用所有支持使空格定义代码块的论点来支持为一个缩进级别设置固定的空格长度(例如四个空格)。
在Python中,空格具有特殊的意义,代码块由缩进定义。
此外,Guido van Rossum建议每个缩进级别使用四个空格(参见PEP 8:Python代码风格指南)。
那么,为什么没有要求每个缩进级别都必须使用恰好四个空格呢?是否存在任何技术原因?
似乎可以使用所有支持使空格定义代码块的论点来支持为一个缩进级别设置固定的空格长度(例如四个空格)。
没有技术上的原因。修改Python解释器以要求每个缩进级别恰好四个空格并不太难。
以下是其他缩进级别的一个用例:在交互式解释器中输入时,使用一个空格缩进非常方便。这样可以减少打字量、更容易正确计数空格数量,并且可读性不是主要问题(因为代码甚至没有保存在文件中)。
我在 tutor@python.org 邮件列表中遇到了另一个例子 - 一位盲人程序员正在使用 Python,使用阅读器程序 - 显然阅读器程序不太喜欢多个空格,因此使用单个空格对他来说更容易。
实际上没有好的或技术上的理由要求使用恰好 4 个空格,我认为反对这种“要求”的最好论据是程序员不喜欢被限制,尤其是被愚蠢和有些武断的规则所限制。当然我们都同意使用 4 个空格是最好的,并且大多数人都会让编辑器自动设置缩进,但是在某些场合下你并不想使用 4 个空格 - 例如一次性脚本代码等 - 这时你就已经让一个感觉受到任意(风格)要求限制的程序员感到疏远了。
对于大多数人来说,空格的重要性并不是问题,因为有几个原因。首先,我想不出一个好的程序员会认为适当的代码格式化是一件坏事。其次,逻辑需要我们将代码分成块。许多语言使用 {} 分隔符。在汇编语言中通常使用标签。Python 选择使用空格实际上相当自然,至少对于英语来说是这样。当你阅读书籍、报纸或博客文章时,有人引用时通常会进行缩进。段落用一个或两个空行分隔。章节通常在页面末尾和下一页的开头使用空白隔开。因此,空格是一件好事,但是强制程序员遵守“你”的特定标准将使程序员去做其他事情。
total count = 1 000 000
……?在Fortran中,您可以!在标识符和数字字面量内部,空格是无关紧要的,并且被编译器忽略,因此您不必使用下划线或驼峰式命名法来使多个单词的标识符可用(只需在单词之间使用空格!),这也很容易使大数字可读。一些语言确实采用了这种规则,但大多数禁止在标识符和数字中使用空格。
当然,灵活的样式始终伴随着错误的风险,例如,在Fortran的情况下,
DO 10 I = 1. 5
将数字1.5赋值给变量DO10I
,而几乎难以区分的
DO 10 I = 1, 5
这个循环从这里到第10行执行5次(我相信在现实生活中,像这样的一个错误——用点代替逗号会严重改变代码的含义——曾经破坏了一次太空任务,但我不记得确切的细节)。
所以,请不要以Fortran为例来支持或反对“锁定”,因为在许多风格方面,它非常松散!
一些锁定的例子包括现代语言采用例如大小写约定并将其作为语言的强制部分(类的大写首字母等)——我相信Ruby至少会警告这一点,而其他一些语言实际上会给出编译器错误,如果您使用小写字母或大写字母命名非类。我认为结果强制统一是一件好事,我不明白为什么在强制样式方面与大小写、间距等不同。换句话说,Arnold大多数已经说服了我;-)。
虽然在单个块中要求一致的缩进有其含义,但是在块之间具有相同或不同的缩进级别并没有任何含义。换句话说,这有什么意义呢?
将其与空白要求进行比较并不真正有效,因为空白是Python的语法的一部分:它定义了范围。只要范围可以明确地定义,我们为什么要关心使用多少空格来定义它?强制每个人使用一些(完全任意的)固定数量的空格会带来什么好处呢?
如果您的文字处理器强制您缩进段落恰好四个空格怎么办?这很烦人,而且毫无意义。强制使用固定数量的缩进空格不应该有任何作用。
这样想吧:Python没有'空白'要求,而是要求您找到一种方法来定义没有大括号的范围。从中得出的是空格,并且说它具有'空白要求'比说它具有'无大括号的范围定义'要更容易和更明显,因此为了简洁明了的目的,我们只说它具有'空白要求' ;-)
Python 的优势在于快速原型设计。大量精良的设计之所以有效,是因为大部分 Python 程序员都有良好的编程习惯。这就是为什么我们不像 Java 那样过多地依赖访问器和变异器,并且可以使用负数访问数组索引。
在我看来,将空格限制为 4 个并禁止制表符并不能使 Python 在大规模情况下更易读。由于我们提倡良好的编程实践,因此长期以来几乎没有出现过任何问题。
我真诚地相信这一点。
Python 带来方便。
reindent.py 可以将任何 Python 文件更改为使用 4 个空格缩进和无硬制表符。 拥有这个方便的实用程序可以避免强迫其他人以 4 个空格的样式编写 Python。
PS. Perl、Java 和 C 程序员花费了很多脑力来处理分号语法错误。每一个浪费在语法琐事上的脑力都是没有用于解决真正编程问题的脑力。Python 的一个优点是快速开发,它最小化了会浪费脑力的语法规则。因此,较少的语法要求比更多的要求更好。
unexpand
)可以将空格转换为制表符。因此,如果有人真的想使用以制表符缩进的Python,他们也有办法这样做。 - unutbuPython在空白和换行方面已经与其他语言不同了。这是语言的一个独特部分,当然非常干净易用,但我认为增加此限制将会降低灵活性。
此外,我喜欢两个空格... 我将被迫使用两个空格编写我的程序,然后通过一个空格加倍脚本作为编译步骤运行它们。