python 缩进_Python缩进的代码风格真的很好吗?

优点:没有优点。VS/Eclipse都有一键格式化代码功能,题主的图片说明如果我高兴Java也可以这么缩进。既然别的语言都能轻松做到,Python又有什么好处?

缺点:

1.可移植性:从网上拷贝代码非常麻烦。假设你要拷贝一段代码放在Python的某个if后面,后面我不说了。

把代码拷给别人非常麻烦。比如要上到网上,这个网站奇葩每行首会去掉空字符。再比如不同平台Tab不一样。再比如俩人用的空格/tab缩进不一样。

万一弄错了缩进,需要从头过一遍(用人脑弄清代码逻辑)才能搞清逻辑再把缩进修复回去。让编辑器自动干这活有点强人所难了。

Tab空格混合的缩进编译器不认,编译器说出错了但是肉眼很难看出到底错在哪,修复起来极其麻烦。

2.语言层面:本来lambda是可以换行的

本来一个过长的表达式可以直接敲回车而不必纠结是套括号还是用反斜杠的

本来不需要pass关键字的

结论:不好,其带来的负面效应远远大于好处。

*********************下面是评论区提出的观点,基本没有有价值的****************************

——有的人提到敲大括号的时间。你写完if要敲回车吧?没省掉吧?左大括号省了,但是多了个冒号啊。右大括号省了,但是多了个backspace啊。如果敲100次键盘的话,python可以省多少?一丁点都没省!

实际上一个逻辑块不管有没有大括号都是一个逻辑块,这段代码属于if分支,不管使用大括号还是缩进,它都属于if分支。虽然节约了敲大括号的0.5秒时间,但是需要思考的内容完全没有改变。如果你真的想在敲键盘上省力,那不如考虑把所有的变量函数都命名为abcdef

——关于可移植性,似乎不太形象。假设我要拷贝一段代码到另一处,完全是自己的代码,不存在tab还是空格的问题。原始代码本身有3个tab,拷贝的时候要小心翼翼把第一行的tab也拷贝进去。按下ctrlV的时候(要看清楚是不是第一行和后面几行的缩进不一样而乱了),目的位置如果不是3个tab,就要小心翼翼的修复,当然现代编辑器都有多行tab的功能——这只是减少你的手指动作,却无法减少脑力活动——甚至增加——没有甚至,肯定增加了,需要从逻辑上理清代码——而且是手指动作也没减少——甚至增加了——没有甚至,肯定增加了,多了选中若干行的操作。

自己拷贝没有任何兼容性问题都这么麻烦,别说换编辑器、从别处拷贝、拷贝到其他平台了。

——接上条,把一个if块拷贝到另外一个地方,冒号后面那一行一定会多一个缩进,因为编辑器认为你在输入冒号后敲了一个回车,就很“智能”地给你加了个缩进。然后你不得不扫一眼逻辑人工修复。当然也可能有的编辑器不这样,但是我不怎么相信它能100%不出错——这是非常操蛋的,还不如100%出问题。

别的语言都怎么处理拷贝缩进问题的?拷贝过去,看着缩进乱了,一键格式化,OVER。不需要任何脑力。

——有人提到pep8,这就是代码风格问题,就算你语法强制缩进,仍然不可避免去人为约定一些东西。为“没有优点”四个字提供了论据。什么强制缩进统一云云,简直是给我提供论据。

其他语言对于缩进,顶多是建议,而你不按照建议来,不会有任何问题。把Java代码写到一行,没问题,能运行,不好看?ctrl+shift+F !

——许多人没明白一个道理,一个问题的解决方案再完美,再优雅,也不如问题压根不存在来的实惠。Python有PEP规定怎么缩进,有reindent给你修复“正常的”空格和tab,然而如果问题不存在的话,解决方案也可以没有。就像C++的右值引用,加入所有对象都是引用传递这技巧根本没有必要出现,抱歉我又黑了。不过C++是历史遗留问题,而Python这点完全是作者任性,后者更该黑。

——有人说我列举的都是小问题。然而本来可以不是问题却变成了小问题,这就是问题。

——需要特别说明的是,我说这个特性不好不代表说Python不好,更不代表说其他某个语言好。好比某个女人问我,女人脾气暴躁好不好,我说不好,她说我性别歧视。你丫有病吧?男人脾气暴躁也不好的,懂?就这么个浅显的道理还要拿出来特别说明,对人类的智商和偏见又一次刷新下限。

——有人说别的语言错了大括号也是逻辑错误。虽然逻辑错误(相对直接挂掉的错误)都比较难以修复,但是行首空白字符出问题,跟某个大括号这个肉眼看得见的字符出问题的几率完全不等。假设if语句后面有10行,那么Python这10行随便哪行出了问题都会导致错误,而用Java的话只是大括号那个字符出问题才会出逻辑错误。肉眼看不见的10个空白,和一个单独的大括号,哪个出错的几率高?

——有人说lambda换行与缩进无关,是作者的任性。假设现在lambda允许换行,你试试使用一个lambda作为回调函数,体验一下换下行什么感觉。缩进确定代码域从根本上决定了lambda不能换行,就算作者不任性也没办法。而如果加了大括号或者begin end,lambda轻松换行

——有人说楼主真弱还拷贝代码。首先我不认为拷贝代码弱,不知道优越感是哪来的。其次,就算拷贝代码弱,问题依然是问题。

——N多人提到4个空格就不出问题,然而Java/C++用4个空格也不出问题。前者出的问题轻则编译不过,重则程序混乱需要人脑修复,而后者的问题很简单:不好看,按一个快捷键一秒不到就能修复。

——有人说大括号是累赘,然而就是这个累赘避免了我列举的问题。大括号是给编译器看的,缩进是给人看的。如果有大括号的话,缩进乱了编译器也能领会代码的意图,并且能根据大括号把代码弄成人看着舒服的样子。纯靠缩进就是自找麻烦。

如果你读到这里了,请再次回顾郭氏哲理——有些东西是偷不得懒的,在这里省劲了就要在别的地方补回来,甚至要付出更多的代价。

总有认提代码风格,仿佛强制缩进了就有了良好的代码风格了一样。实际上缩进是代码风格中很小的一部分,也是最简单的一部分,任何语言,即便不强制缩进,人们写代码的时候也会缩进。如果有反例的话请给出,反正我用VC6.0学C的时候用的谭浩强也知道缩进。况且这年头想不缩进也不成啊,打个大括号一回车自动就缩了。

除了缩进之外,代码风格还包括注释、命名规则、空行、长行换行(Python缩进给这给也带来了问题)、运算符前后空白等等。我所列举的都是代码风格中非常浅显的部分,两个人即便在我说的方面都做的一样,也未必有一样的风格。所有的一切,不单单是一个缩进就能解决问题的。

过度简化也是复杂的一种,这是许多人看不清一点。有些东西是偷不得懒的,在这里省劲了就要在别的地方补回来,甚至要付出更多的代价。(这句话很有哲理的,请细细品味)

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值