如何让你写的Python代码更简洁

白癜风治疗目标 http://www.bdfyy999.com/bdf/zhenliaotese/xianjinliaofa/96355.html
?

作者:IGI,网易游戏运维专家,10年运维老司机,负责网易游戏私有云平台的运维工作,专注于运维技术能力的深入打磨,专治运维界各类疑难杂症,拥有强大的故障分析能力及丰富的故障解决经验

随着互联网技术的发展,现如今信息爆炸越来越明显,大家在工作中需要接触及学习的技术点也是越来越多.在这种大背景的情况下,以号称「简洁」著称的Python语言自然而然火了起来.

那是不是只要使用Python来写代码,就算「简洁」编码呢?非也,即使用同样的语言,代码的「简洁」程度也是因人而异,本文将结合生产环境中常见的代码写法进行讲解,给大家拨开迷雾见云彩,看透其中的奥秘.

何谓「简洁」编码?

在开始前,先问大家一个问题,什么样的代码算得上「简洁」?

这类问题,其实也隐藏在我们的日常生活中,这里我直接举个例子,大家请看下面三句话

1.家有千金,行止由心.2.形若槁骸,心如死灰.3.君莫欺我不识字,人间安得有此事.

大家看了上面三句话的第一眼是什么感觉?用了古文的写法,表达也非常到位,可是大家细想,在理解这三句话真正含义的时候,是不是脑海里面有过短暂的消化和转化的时间?大家再看以下三句话,与上面三句话表达出同样的意思.

1.有钱,任性2.心好累3.我读书少,你不要骗我

是不是一眼就能抓住这几句话的含义?

简短,直观,易于理解,这就是「简洁」,而符合这种特性的代码,则为「简洁」的编码

简洁代码的思路讲解

接下来,我将以下工作中常见的代码写法来讲解,如何简洁化我们的python代码

注:以下代码样例仅针对最常用的python2版本

1.使用dict的默认操作符可以方便的获取到key,减少不必要的dict.keys()和dict.has_key()操作

代码样例1

代码样例2

2.当需要同时获取字典的key和value时,可以使用iteritems迭代器

代码样例3

3.文件的默认操作符也是类似的,在循环时可以直接使用

代码样例4

小贴士1:

如果类型支持,就直接使用默认迭代器和操作符,例如列表,字典和文件.默认操作符和迭代器简单高效,没有额外的方法调用.

4.尽可能使用隐式布尔值条件语句

代码样例5

代码样例6

代码样例7

小贴士2:

Python会在条件语句上下文中求布尔值.按简单的直觉来讲,就是所有的「空」值都被认为是false.因此0,None,[],{},“”都被认为是false.使用Python布尔值的条件语句更易读也更不易犯错.大部分情况下,也更快.

永远不要用==或者!=来比较None和布尔值,直接使用ifx:代替,如果需要区分False和None,可以使用ifxisNone:这样的语句.

5.利用set和list简化多个条件语句的值判断

代码样例8

代码样例9

6.利用locals函数或是globals函数可以更方便的完成多个变量的检查

代码样例10

7.利用条件语句的取反(ifnot),可以尽可能的减少复杂逻辑中的代码嵌套层级

样例11改进前

样例11改进后

写出「简洁」Python代码的学习资料

上面举了11个例子,让大家有了真实的「简洁」思路,那这些思路从何而来,以下是我认为需要反复阅读并理解吸收的知识

1.《Python之禅》

相信很多同学在学习Python的时候,也看过箸名的Python之禅,像上面的样例11,改进前就是违背了扁平胜于嵌套的信条,我们可以多在review自己代码时,思考一下代码是不是违背了这些信条

优美胜于丑陋(以编写优美的代码为目标)

明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)

简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)

复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)

扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)

间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)

可读性很重要(优美的代码是可读的)

即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)

不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写except:pass风格的代码)

当存在多种可能,不要尝试去猜测,而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)

虽然这并不容易,因为你不是Python之父(这里的Dutch是指Guido)

做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)

如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)

命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

注:《Python之禅》是年的Python改进提案,编号为PEP20。以禅诗、偈颂的形式。这个是一位老资格的Python人TimPeters将Python语言创始人GuidovanRossum的Python设计指导原则简明扼要地归纳而来,是我们学好python并写出高质量python代码的关键点,每一个Python开发者都应该反复阅读、理解、记忆、运用的信条.

2.PEP8和GooglePythonStyleGuild

PEP8一定要读几次,有些规范记不住没关系,可以多使用pylint检查工具来给检查代码,GooglePythonStyleGuild也是非常值得大家熟读的

PEP8:


转载请注明:http://www.aierlanlan.com/rzgz/91.html

  • 上一篇文章:
  •   
  • 下一篇文章: