2525- 动态语言的变量命名尽量可以从名称就知道其类型,比如url_list, info_dict_list,降低阅读和理解的难度。(我的感觉就是动态语言易编写,写不好后期更难维护)
2626- 风格上衡量不了请参考知名开源项目的做法。以可读性和维护性作为标准。
2727
28+ * `《Python 工匠:善用变量来改善代码质量》 <http://www.zlovezl.cn/articles/python-using-variables-well/ >`_ 动态语言命名尽量可以表达出类型,否则不好维护
2829
2930编程范式
3031--------------------------------------
@@ -94,6 +95,7 @@ Python有一些语法上的坑,比如默认参数只计算一次,不要使
9495编码的时候想着如何测试它,甚至都可以改善设计。对于动态语言,一直有『动态语言一时爽,代码重构火葬场』这种说法,说明动态语言如果没有良好的设计和测试,以后是会埋下不少隐患的。
9596当你发现debug的时间甚至比写代码长很多的时候,当你发现总是返工对代码修修补补的时候,或者可尝试下TDD。
9697你可以学习使用下python的unittest或者pytest等进行单元测试,以保证代码质量。个人工作经验也表明,难以测试的代码往往是设计不太好的代码。
98+ update: 经验表明,TDD未必是必要的,但是单元测试是很必要的。如果是新项目建议为所有的复杂函数写单元测试,为项目质量保证。
9799下边是一些参考书籍:
98100
99101
@@ -112,14 +114,17 @@ Python有一些语法上的坑,比如默认参数只计算一次,不要使
112114
113115* KISS原则,Keep It Simple, Stupid。能简单的绝对不要复杂,不要炫耀代码技巧,简单可读最重要,后人会感谢你的。
114116* DRY原则。就算咱不懂设计模式,只要代码复杂重复了就及时抽取出来,至少不会碰到大问题。
117+ * YAGNI(You Aren't Gonna Need It),不要猜测性编码。
118+ * 快速失败,灵活使用断言。契约式编程(先验条件和后置条件)
119+ * 及时清理技术债务,防止『破窗』。
115120* 一次只做一件事。尽量避免复杂度过高的逻辑,尽量做到代码简单,意图明确。
116- * 高内聚,低耦合。写代码的时候想着怎么测试它就能避免过度复杂,耦合严重的代码。
121+ * 高内聚,低耦合。意义相近的东西应该放到同一个地方。 写代码的时候想着怎么测试它就能避免过度复杂,耦合严重的代码。
117122* 代码应当易于理解。 《代码大全》、《编写可读代码的艺术》、《代码整洁之道》啥的都是告诉你代码最好自解释,好理解。记住代码首先是给人看的,其次才是让机器执行的,不要过度设计。
118- * 不要过早优化,最小可用原则。根据二八定律,大部分性能瓶颈只在20%的部分,这些才是真正需要优化的地方。
123+ * 不要过早优化,最小可用原则。先测量,后优化。 根据二八定律,大部分性能瓶颈只在20%的部分,这些才是真正需要优化的地方。
119124* 不要炫技,可读性最重要。合适的地方使用合适的技巧,不要过度炫耀语法糖导致维护和理解困难。
120125* Think about future, design with flexibility, but only implement for production. 尽量设计良好,避免繁杂和冗余。好的架构和设计都是不断演进的。
121126* 文档化。哪些东西该文档化,哪些该注释需要做好,以便新手可以尽快上手。尽量做到代码即文档,tornado的文档和代码就是典范。
122- * 不要放过任何错误和异常 ,一定要做好记录。血泪教训,使用Sentry或其他工具记录好异常发生的信息,为定位bug提供便利,web端的bug一般不好复现。
127+ * 不要直接吞掉任何错误和异常 ,一定要做好记录。血泪教训,使用Sentry或其他工具记录好异常发生的信息,为定位bug提供便利,web端的bug一般不好复现。
123128* ......还有的大家可以自己补充
124129
125130
@@ -150,7 +155,7 @@ python代码坏味道(新手经常犯的错误)
150155- 没注意可变类型和非可变类型,传入可变类型并在函数里修改了参数,坑。。。
151156- 没有逻辑分块,没有美感(这个就算了),就算不限制一行超过80列,也不能写一行写几百列吧,左右转头脑瓜子疼
152157
153- 嗯,一开始就开启pep8和pylint检测能显著提升代码质量。咱写不了诗一样的代码,也不能写shǐ 一样的代码。
158+ 嗯,一开始就开启pep8和pylint检测能显著提升代码质量(各种错误警告逼着你写出高智力代码) 。咱写不了诗一样的代码,也不能写shǐ 一样的代码。
154159可能很多东西对老鸟来说都是显而易见的,不过菜鸟和高级菜鸟们还是需要多多练习积累经验。慢慢摸索吧骚年。。。。。。
155160
156161
@@ -178,6 +183,7 @@ Code Review
178183一定要有良好的日志记录习惯。良好的日志对于记录问题至关重要。python有方便的日志模块帮助我们记录,日志输出的代价是比较小的,python的日志模块尽量做到对函数功能没有性能影响,可以在线上和开发环境设置不同的log等级,方便开发调试。注意别再日志语句里引入了bug或异常。
179184对于异常,一定『不要吞掉任何异常』,常有新手上来就try/except,也不区分非退出异常,也没有日志记录(坑啊......)。请先阅读python文档的异常机制,可以使用Sentry等工具记录异常。同时发生异常时候的时间,调用点,栈调用信息,locals()变量等要注意记录,给排查错误带来便利。有些错误的复现是比较困难的,这时候日志和异常的作用就凸显出来了。
180185
186+ * `《每个 Python 程序员都要知道的日志实践》 <http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652564362&idx=1&sn=f33910af004f276bbef7ae52e0757bcb&chksm=8464c3c0b3134ad617bcffd865894344367fdd2995a0d5ff9c4da30e0c158b3d02b3d616f615&mpshare=1&scene=23&srcid=1124K7Ht1FP2A1Fnvi3HTBE5#rd >`_
181187
182188调试
183189--------------------------------------
0 commit comments