同事炫耀他的 Python 代码只有十行,我展开一看,好家伙,每行都巨长.
办公室新来了个年轻同事,姓刘,平时话不多。有一天中午吃饭,他端着饭盒过来说自己写了个Python脚本,只用了十行代码就搞定了一个数据处理任务。
我问什么任务。他说是把一个Excel表格里几百行数据按条件拆分,再合并成几个新文件。我心想这活我以前写过,少说也得四五十行。他跟我说十行,我确实有点好奇。
吃完饭他打开电脑给我看。我凑过去,第一眼扫过去,嗯,确实是十行。没有空行,没有注释。但等我仔细看每行代码的长度,好家伙,差点没把我眼睛看花。
第一行就占了半个屏幕,里面塞了三四个链式调用,括号套括号,一层又一层。我数了数,光这一行就快两百个字符。代码从屏幕左边一直拖到右边,还得往右拉滚动条才能看到尾巴。
我看第二行,更夸张。一个lambda表达式里面包了个列表推导式,列表推导式里又嵌了个三元表达式。正常写法分开写五行的东西,他全挤在一行里。
我问小刘,你这分行不就行了,干嘛非挤在一起。他说,行数少看着厉害,自己写的自己看得懂就行。我说你这代码,别人接手得哭死。他笑了笑没说话。
我知道不少程序员有这种心理,觉得代码行数越少越牛。有些人发朋友圈就爱晒代码行数少,好像写长了就掉价。但我教了十几年编程,带过好几轮学生,我跟他们讲的都是同一个道理:写让人能看懂的代码,比写让人看不懂的代码要难得多。
小刘这段代码我帮他分析了一下,他那十行要拆开加个换行加个变量名,大概得三十行上下。但三十行的版本,随便找个初级程序员都能改。他那十行的版本,他自己过一个月再看,也得琢磨半天。
后来我跟他说,你要是想优化,可以换个思路。用pandas的几个函数,再加上个循环,十五行左右,每行都短,也好理解。他想了想,说试试。过了一下午他跑过来,说确实好写了,而且运行时间还短了。他原来那写法,为了凑十行,绕了不少弯路。
很多人觉得代码短就是效率高,其实不是。代码可读性才是最重要的,其次是别人能接手,最后才是行数。
现在小刘写代码,会在意每行不超过80个字符,一个函数不超过二十行。他说以前觉得那样写出来不够炫,现在觉得能让人一次看懂才是真正的厉害。
其实写代码跟写文章一个道理。有人觉得用大词长句显得有水平,但真正好的东西是让人读了不费劲,自然而然就懂了。我有时候看学生的作业,有些写得花里胡哨,有些写得平实简单。最后能长期发展的,都是那些愿意把心思花在让人看懂上的人。小刘算是明白得早的。能明白这个道理,编程路就能走得更远。