有人说,编程语言界的两大 “反人类” 设计,一个是 JavaScript 的隐式类型转换,另一个,就是Python 的强制缩进。
从Python诞生至今,关于 “缩进是不是败笔” 的争论就没停过。讨厌它的人骂:凭什么用空格决定代码生死?少敲一个空格就报错,简直是编程语言的耻辱。喜欢它的人爱:统一的格式,清爽的代码,再也不用为大括号吵得面红耳赤。
而我与Python 缩进的恩怨,要从一段熬夜改 Bug 的深夜说起。
第一次被缩进坑到怀疑人生
刚学编程时,我最先接触的是 C++ 和 Java。
在那些语言里,代码块靠大括号 {} 区分,换行随便换,空格随便敲,哪怕代码挤成一团,只要括号配对,就能跑起来。
那时的我坚信:代码怎么写,是我的自由。
直到我遇见 Python。
老师在台上轻描淡写:“Python 靠缩进区分代码块,记住,缩进必须一致。”
我满不在乎:不就是空格嘛,多大点事。
结果第一次写循环,我就栽了。
for i in range(10):print(i)
运行,报错。
IndentationError: expected an indented block
我盯着屏幕一脸懵:语法明明没错,为什么跑不起来?
翻来覆去看了十分钟,才发现print前面少了四个空格。
加上空格,代码瞬间正常。
那一刻我心里只有一个念头:这设计也太反人类了吧!
少一个空格就报错,比老师查作业还严。凭什么别的语言靠符号,Python 偏要靠空格?这不是故意为难人吗?
我甚至在心底给 Python 判了死刑:强制缩进,绝对是编程语言史上的败笔。
直到我接手了前辈的 “屎山代码”
工作第一年,我接手了一个前辈留下的 Java 项目。
打开代码的那一刻,我人傻了。
if(flag){function();test();}else{// 乱七八糟的注释 other();}
大括号乱放,缩进忽大忽小,有的代码挤在一行,有的空行堆了七八行。
想改一个逻辑,先要花半小时梳理代码层级,眼睛看得发酸,脑子绕得发晕。
更崩溃的是团队协作:有人喜欢大括号不换行,有人偏爱大括号独占一行;有人用 Tab 缩进,有人用空格;代码合并时,因为格式问题冲突不断,吵架比写代码还多。
直到我转去做 Python 项目,世界突然清净了。
打开任何一段 Python 代码,都是这样的:
def calculate(num): if num > 0: return num * 2 else: return 0
层级清晰,排版统一,没有人会为格式争论,没有人能写出乱成一团的代码。
我第一次意识到:强制缩进,看似限制了自由,实则守护了秩序。
很多人骂 Python 缩进是败笔,理由无非这几个:
都不能说是败笔了
python的缩进相当于大聪明创造了别的语言里不存在的问题
我们之所以用计算机语言编程而非自然语言,原因在于,首要的是语言的精确性,无歧义,不易混淆
python在这几个问题上都是有大缺陷的
当然了,很多时候出于各种原因,语言有妥协,比如 c 语言有一大坨
但你不能为了创新而创造屎
我主要开发用python,写算法原型不是问题,但是上生产。。。我没那么大信心 尤其是我做的不是 crud 那种垃圾活,是偶尔有错可能要赔真钱的那种,最怕的就是编译运行顺利 但是某个细微地方其实就因为一个空格结果逻辑不对的错误
任何肉眼看不见的字符都不应该能影响程序逻辑
这是开发语言的基本大法
python 在这点上就是 0 分 一票否决
java pascal scheme/lisp 甚至 c fortran 都要好得多
任何一个受过严格学术训练的都不会开这种脑洞,允许空格影响逻辑
没有完美的编程语言,只有适合自己的设计。
C系语言给你极致的自由,Python给你统一的优雅;有人爱大括号的随意,就有人爱缩进的整洁。
它不是败笔,只是一种选择。
如今再敲Python代码,我会习惯性地敲出四个空格,看着整齐的代码层层递进,心里满是踏实。
当年那个抱怨缩进反人类的少年,终于理解了Python的温柔:用一点点约束,换整个世界的清爽。
如果你也曾被Python的缩进坑到抓狂,不妨再给它一次机会。也许某天,你也会和我一样,再也离不开这份温柔的强制。
如果你正在学习python,这些Python资料、数据分析、Python从入门到实践第三版pdf书籍、Python+Pycharm安装包&永久激活插件、直播课程,可以在这里免费领取哈👇