Python 的缩进是否是反人类的设计?

前些天,我写了《Python为何使用缩进来划分代码块?》,文中详细梳理了 Python 采用缩进语法的 8 大缘由。我极其喜欢这种简洁优雅的风格,因此对它赞美有加。python

然而文章发出去后,很是意外,竟收到了大量的反对意见!!(以往文章的互动很少,这次创下了记录)git

我就不截图了,先摘录几则最刺眼的评论:程序员

最大的缺陷就是这个缩进机制github

去掉花括号是最愚蠢的设计安全

绝对是过分设计了,缺陷很大微信

最大的缺点就是缩进,太反人类了编辑器

……函数

对于这一类的评论,我认为他们是“睁着眼睛说瞎话”,颠却是非黑白。Python 的缩进语法如此简洁好用,怎么就“过分设计/愚蠢/缺陷/反人类”了?工具

常言道众口难调,有人爱甜粽子有人爱咸粽子,可是对于咸甜味道,你们是有所共识的,不至于感官紊乱,大放厥词。设计

还有比较多的评论,认为缩进容易形成混乱:

代码多了,本身看着累,别人更难懂

眼花了,仍是括号好些

仍是{}或end更清晰

没有花括号老以为没有安全感

缩进层次看不清楚

没有大括号不便于阅读

层次一多看起来很乱,不知哪层是哪层,要缩多少。到底退出循环没有。

看着明明缩进是对的,但运行时老是报错

用python写上十万行试试,到时候你就知道,什么叫混乱看不下去

……

如今主流的 IDE 工具都很强大,应该善于使用其基本功能,例如:设置显示空格字符、设置 tab 自动转化为空格、设置 tab 键为 4 个空格……同一层级的缩进还会有浅浅的竖线,在视觉上辅助阅读。

至于说层次过多、代码很长的状况,这自己就是一种代码坏味道!当出现过长的函数或者类时,优秀的程序员 第一时间该考虑的就是重构。推荐一本书《重构:改善既有代码的设计》,里面有正道的价值观和详尽的方法论。

还有说点击右括号,能够看到匹配的左括号,会清晰。有这东西确实不错,但没有,我并不诉求。自己紧凑简洁的代码,缩进阅读会很快。

除了以上两大类的评论,我还收到如下几种比较有表明性的评论:

  • 有人说“取消花括号会大大下降运行速度”、“这个特性鲁棒性过低了”。——这纯粹是臆想,让他们给出论证和例子,无果。别觉得在哪里看到有人说 Python 慢,就想固然把锅扣到缩进的头上。
  • 有人说“多人协同编辑时,有人用tab,有人用空格”。——我说开发团队应该统一规范,而后用 autopep8 之类的辅助工具。他说规范要不停花精力维护,要花成本。拜托!这年头还有人不重视代码规范,直接开除“猿籍”。
  • 有人说“缩进没办法自动格式化代码”。——这在复制移动代码,或者要改变代码层级时,有此诉求。我一直用比较笨的方法调节(tab、shift+tab、加减空格),确实是比较笨,可是会比较有把握。刚在 PyCharm 里研究了一下,我发现它是支持自动格式化的,只是有个小小的问题要注意!

关于缩进的自动格式化,这里有两个例子,给你们演示一下:

上述例子,删除掉那行 if 条件语句,而后直接”ctrl+alt+l“做全局格式化,格式会出错。咱们但愿两句 print 向左缩进 4 格,可是 return 那句也会向左缩进。

在删除 if 那行后,若是咱们只选中两行 print,做局部”ctrl+alt+l“格式化,那只有这两行会缩进,就没问题。

再看第二个例子,咱们复制了一段新代码,可是它的缩进不对:

这时候,若直接“ctrl+alt+l”全局格式化,或者选中那三行再格式化,结果都不对!缘由是第二个 if 的缩进格数小于 4 个,因此 PyCharm 认为它属于一级缩进(即不应有空格),因此自动格式化时就把它左移了。

若是选中它们,先按 tab 键右移(即新代码变成缩进大于 4 格,小于 8 格):

此时再做格式化的话,它们的缩进就跟第一层的 if 一致了(两层 if 是兄弟关系)。

同理,若是你想把新代码缩进到第一层 if 的内部(变为父子关系),那只需选中上图三行代码再 tab 键右移 4 格,以后格式化就能够了!

建议你们在编辑器里实操一下。等空了我会录制一期小视频(B 站搜“Python猫”),敬请留意。

除了上面的评论/观点以外,咱们在微信交流群里也讨论了这个话题。@樱雨楼(github.com/yingyulou) 小姐姐的观点对我挺有启发。

群聊截图已记录在“Python知识星球”里(t.zsxq.com/jeM33bQ),其中…

  • 缩进使得代码失去了形式语言里所谓的“上下文无关文法”,从而使得空格+数量的组合变得再也不是无关紧要的。
  • block 做为一个“语法组分”,须要一个定界符,而空格通常不做为语法组分,因此就以为少了些什么。

三言两语无法转述清楚,但她谈论缩进话题的视角确实使人耳目一新!

上次的文章发出后,有很多小伙伴表示很喜欢 Python 的缩进。我本觉得会听到不少这类的声音,没想到倒是负面的评论更多。(也许更多认同的声音没有表现出来)

本文对几类典型的评论做出了回应,再次表达了我在这个话题上的关注和理解(以及情绪的抒发),但愿也能给读者们带来一些思考和收获吧。

相关文章
相关标签/搜索