我常逛像 Exercism 这样的网站,在那里编写或重温一些习题来精进我的编码技巧。现在有个危险的流行正在蔓延,我注意到大家很推崇仅用短短几行的代码,认为这样很优雅、有创意,认为这超棒。

但这完全是鬼扯。Brian Kernighan 说得很对:

「想帮短代码除错比你重写代码还要难两倍。如果你真的觉得自己超会写短代码,那么就等到你帮短代码除错的时候再来看看是不是真的那么厉害吧。」

当你把编码的行数减少到令人费解时,这还会是个容易维护或可长久使用的代码吗?替编码抓错会变得更简单还是更有难度?更重要的是,如果原来的编码跟短代码功能一样,那你是不是有点浪费时间呢?

较短的编码不见得代表是更好、更清楚的编码。当你不小心做的超过了,让编码变的难解,或用了模糊且不必要的模组,你可能会得对你的同事一边装可爱,一边说:

「我浪费超多时间在完美化与複杂化这个简单模组,所以你现在才可以花超多时间来了解它。你不觉得这超棒的吗?揪咪,编码忍者敬上。」

这不但毫无意义而且很自私,而且完全只是种自负的表现。不必要而多余的代码的确不好,但短代码也不总是就是比较好。缩短编码与简化编码有很大的不同,因为缩短编码仅仅只是让编码变短。

我们用两种简单 Python 计算程式来找两个字串间的「汉明距离,又称信号距离(hamming distance)」。汉明距离是独立字元的计算中为不可或缺的角色。

abcde 与 abcde 之间的汉明距离为 0

abcde与edcba之间的汉明距离为 4

abc 与 abcde之间的汉明距离为 2

以下是 Exercism 上被高度推崇的编码:

这是个超棒的编码 … … 如果你的目的是写出混淆代码(code obfucation)的话。

以下是网站上很不起眼的编码:

它用了超过 15 行以上的编码,汉明距离为 517,但让我来解释为什么这个比第一个范例更好的原因:

伪代码与文档字符串的注解都很清楚。你可以很容易去辨读每个部分与字串的用意,所以任何语言的初级程式员都能理解。有几个「高级程式员(Pythonistas)」能第一眼就理解那个比较短的编码?

每行都只执行 1 到 2 个方法(method)或操作(operation)。现在你在回头看看第一则里有多少个 sum method、a != comparison、 forloop 与神奇的 map method 在同一行里。你可以比较一下,两者之间,哪个比较容易读呢?

有逻辑地帮变数命名,用「i」的代表单一字元的变量。你可以试着把第一个范例丢到一个更大型的程序中,然后试着找找看「x、y、a 或 b」。

综合以上,我们可以清楚了解到每个作者的意图:

写短代码的人是为他 /她自己而写的。

第二则范例的作者是为大家而写的。

我想说的是:拜托你,别当个坏蛋。

无论是前端的 HTML/CSS 或后端的 Python 与 Ruby on Rail,都请你写一个大家都可以读得懂的

本文转自 www19 51CTO博客,原文链接:http://blog.51cto.com/doujh/1843874,如需转载请自行联系原作者

有趣的超短python代码_请不要为了炫耀而写出超短代码相关推荐

  1. java 拼 变量名_你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码

    本篇文章适用语言:python,c++,Java.(其实我就是随便bb) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效 ...

  2. 详细讲解用Python列表for循环还有if判断语句写出1-100之内的素数,思路清晰语法准确代码简单易懂实用

    详细讲解用Python列表for循环还有if判断语句写出1-100之内的素数,思路清晰语法准确代码简单易懂实用,当然还有一定技巧的算法渗透其中.请看视频: Python 代码实例,找出1-100之内的 ...

  3. python好学吗1001python好学吗-怎样才能写出 Pythonic 的代码 #P1001#

    L = [ i*i fori inrange(5) ] forindex, data inenumerate(L, 1):print(index, ':', data) 去除 import 语句和列表 ...

  4. 优雅的写出 JavaScript 代码

    目录 前言 避免使用 js 糟粕和鸡肋 编写简洁的 JavaScript 代码 使用 ES6/ES7 新特性 Babel ESLint Prettier 采用函数式编程 优雅的敲 JS 代码的几个原则 ...

  5. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...

    如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进.使用清晰的变量名和方法名.在必要时提供文档与注释.不要过度精简代码等等. 但是对于什么是烂代码,你有比较清晰的认识吗? 在 G ...

  6. idea代码提示插件_IDEA 插件推荐 —— 让你写出好代码的神器!

    概述 今天介绍的插件主要是围绕编码规范的.有追求的程序员,往往都有代码洁癖,要尽量减少代码的「坏味道」. 代码静态检查是有很多种类,例如圈复杂度.重复率等.业界提供了很多静态检查的插件来识别这些不合规 ...

  7. 如何写出高性能代码(四)优化数据访问

      同一份逻辑,不同人的实现的代码性能会出现数量级的差异: 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升:同一份代码,也可能在不同处理器上运行也会有几倍的性能差异:十倍程序员 ...

  8. 写出漂亮代码的45个小技巧

    不知道大家有没有经历过维护一个已经离职的人的代码的痛苦,一个方法写老长,还有很多的if else ,根本无法阅读,更不知道代码背后的含义,最重要的是没有人可以问,此时只能心里默默地问候这个留坑的兄弟. ...

  9. 大厂秘籍:谷歌代码规范开放下载,手把手教你写出好代码

    这两天和一位大厂的朋友聊天,说起他们今年技术岗晋级答辩要增加代码走读环节,那该如何写出好看又好用的代码? 代码是程序员改变世界的工具,每个程序员都会写代码,但不一定能写出好代码. 如今的大型商业软件系 ...

最新文章

  1. 【译】史上最强的vimrc文件
  2. 每天一道LeetCode-----寻找给定字符串中重复出现的子串
  3. common.php下载,插件common.php全局函数文件
  4. java垃圾回收理解与算法
  5. 微型计算机原理IMUL指令,微机原理与系统设计实验
  6. ThinkPHP5.0 实现 app支付宝支付功能
  7. 25.211 -- 物理层信道
  8. 声控报警器c语言程序,声控报警器(声控电路)
  9. Spring源码系列(五)——@Aspect源码解析
  10. Oracle Data Integrator(ODI)架构
  11. Linux 下安装 Wordpress教程
  12. leaf Variable、requires_grad、grad_fn的含义以及它们之间的关系
  13. 吹筒仔海钓纪实,来自陆丰陆丰公众号
  14. uniapp MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 upgrade listeners
  15. Drools记录之DRL规则语言
  16. 神马搜索广告的投放形式介绍!神马广告推广费用介绍
  17. WIN7下vim安装配置整理(插件齐全)
  18. POCO软件测试自学,自动化UI测试工具airtest 之V2.2 airtest文档学习POCO
  19. 论epoll的使用 - 高调coding,低调做人 - C++博客
  20. 第一次整理,非常潦草。诸位莫怪。

热门文章

  1. nodejs 如何使用 fetch
  2. mac开发和windows开发有啥区别_ARM架构Mac开发机跑分出炉
  3. 人工智能风口只有2%的人能够成为赢家!——CSDN蒋涛
  4. 著名科学家潘宗光为何潜心学佛?
  5. 我的世界服务器物品不掉落,我的世界死亡不掉落(InventoryKeeper)插件
  6. 奇怪问题- app在配置minSdk<23正常,>=23后运行crash
  7. 【Excel】csv文件修改分隔符
  8. git1:git课程概述
  9. chatgpt赋能python:Python如何命名输出图片名字
  10. Simulink创建自定义库