有趣的超短python代码_请不要为了炫耀而写出超短代码
我常逛像 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代码_请不要为了炫耀而写出超短代码相关推荐
- java 拼 变量名_你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码
本篇文章适用语言:python,c++,Java.(其实我就是随便bb) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效 ...
- 详细讲解用Python列表for循环还有if判断语句写出1-100之内的素数,思路清晰语法准确代码简单易懂实用
详细讲解用Python列表for循环还有if判断语句写出1-100之内的素数,思路清晰语法准确代码简单易懂实用,当然还有一定技巧的算法渗透其中.请看视频: Python 代码实例,找出1-100之内的 ...
- python好学吗1001python好学吗-怎样才能写出 Pythonic 的代码 #P1001#
L = [ i*i fori inrange(5) ] forindex, data inenumerate(L, 1):print(index, ':', data) 去除 import 语句和列表 ...
- 优雅的写出 JavaScript 代码
目录 前言 避免使用 js 糟粕和鸡肋 编写简洁的 JavaScript 代码 使用 ES6/ES7 新特性 Babel ESLint Prettier 采用函数式编程 优雅的敲 JS 代码的几个原则 ...
- 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...
如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进.使用清晰的变量名和方法名.在必要时提供文档与注释.不要过度精简代码等等. 但是对于什么是烂代码,你有比较清晰的认识吗? 在 G ...
- idea代码提示插件_IDEA 插件推荐 —— 让你写出好代码的神器!
概述 今天介绍的插件主要是围绕编码规范的.有追求的程序员,往往都有代码洁癖,要尽量减少代码的「坏味道」. 代码静态检查是有很多种类,例如圈复杂度.重复率等.业界提供了很多静态检查的插件来识别这些不合规 ...
- 如何写出高性能代码(四)优化数据访问
同一份逻辑,不同人的实现的代码性能会出现数量级的差异: 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升:同一份代码,也可能在不同处理器上运行也会有几倍的性能差异:十倍程序员 ...
- 写出漂亮代码的45个小技巧
不知道大家有没有经历过维护一个已经离职的人的代码的痛苦,一个方法写老长,还有很多的if else ,根本无法阅读,更不知道代码背后的含义,最重要的是没有人可以问,此时只能心里默默地问候这个留坑的兄弟. ...
- 大厂秘籍:谷歌代码规范开放下载,手把手教你写出好代码
这两天和一位大厂的朋友聊天,说起他们今年技术岗晋级答辩要增加代码走读环节,那该如何写出好看又好用的代码? 代码是程序员改变世界的工具,每个程序员都会写代码,但不一定能写出好代码. 如今的大型商业软件系 ...
最新文章
- 【译】史上最强的vimrc文件
- 每天一道LeetCode-----寻找给定字符串中重复出现的子串
- common.php下载,插件common.php全局函数文件
- java垃圾回收理解与算法
- 微型计算机原理IMUL指令,微机原理与系统设计实验
- ThinkPHP5.0 实现 app支付宝支付功能
- 25.211 -- 物理层信道
- 声控报警器c语言程序,声控报警器(声控电路)
- Spring源码系列(五)——@Aspect源码解析
- Oracle Data Integrator(ODI)架构
- Linux 下安装 Wordpress教程
- leaf Variable、requires_grad、grad_fn的含义以及它们之间的关系
- 吹筒仔海钓纪实,来自陆丰陆丰公众号
- uniapp MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 upgrade listeners
- Drools记录之DRL规则语言
- 神马搜索广告的投放形式介绍!神马广告推广费用介绍
- WIN7下vim安装配置整理(插件齐全)
- POCO软件测试自学,自动化UI测试工具airtest 之V2.2 airtest文档学习POCO
- 论epoll的使用 - 高调coding,低调做人 - C++博客
- 第一次整理,非常潦草。诸位莫怪。