66
77代码风格
88--------------------------------------
9- 不一致的开发风格会给协作开发带来困难,同时也妨碍代码阅读,读代码的时间是多于写代码的,所以有必要统一编码规范。推荐使用pep8或者其子集作为代码规范,使用vim插件python-mode开启pep8和pylint对代码就行检测 。如果使用其他编辑器或者IDE工具最好也使用相关插件使代码符合规范。工程上的代码应该尽可能保持清晰易懂,推荐看看requests等优秀的开源库学习下。强烈建议新手看看以下参考写出格式规范的代码,强烈建议打开pep8和pylint,pylint可以帮助你干掉很多低级错误。建议使用py的公司都指定好自己的代码规范并且严格遵守,同时做好code review,防止造成以后的维护噩梦。
9+ 不一致的开发风格会给协作开发带来困难,同时也妨碍代码阅读,读代码的时间是多于写代码的,所以有必要统一编码规范。推荐使用pep8或者其子集作为代码规范,使用vim插件python-mode开启pep8和pylint对代码静态检测 。如果使用其他编辑器或者IDE工具最好也使用相关插件使代码符合规范。工程上的代码应该尽可能保持清晰易懂,推荐看看requests等优秀的开源库学习下。强烈建议新手看看以下参考写出格式规范的代码,强烈建议打开pep8和pylint,pylint可以帮助你干掉很多低级错误。建议使用py的公司都指定好自己的代码规范并且严格遵守,同时做好code review,防止造成以后的维护噩梦。
1010
1111* `《PEP8.org》 <http://pep8.org/ >`_
1212* `《PEP 8 -- Style Guide for Python Code》 <https://www.python.org/dev/peps/pep-0008/ >`_
@@ -110,22 +110,24 @@ update: 经验表明,TDD未必是必要的,但是单元测试是很必要的
110110
111111一些常见原则
112112----------------------------
113- 对于什么是好代码,什么是坏代码我现在还没有太多经验,但是最近工作接手别人的代码感觉困难重重,还是too naive啊。每个人实力不同,风格不同,一起协作的时候确实会遇到很多问题和分歧。感觉code review啥的还是很有必要的,可以让菜鸟学习下老鸟的经验,也可以让老鸟指导下菜鸟的失误,同时避免过于个人化的糟糕风格(比如让人想立马离职的高达成百上千行的复杂函数,比如上来一堆不知道干啥的幻数,比如上来就 `form shit import *` 导致俺的编辑工具找不到定义,比如整个项目没有一行测试代码,比如不知道用logger,全用print+眼珠子瞅,一个bug找半天,比如没有pep8检测导致你的环境打开别人的代码彪了一堆警告......)。说好的规范呢,说好的设计模式呢,说好的高内聚低耦合呢?说好的KISS原则呢?说好的DYR原则呢?其实俺只是想多活几年,至少不要到三十岁头发掉光。啥设计模式的可以不用,能干活的代码就行,牢记几个原则,没事的时候对复杂的东西重构下,代码不能自解释的搞搞文档,不被队友坑同时不坑队友,俺就心满意足了。最后还是列举一下常用原则、思想和注意事项吧(最好import this看看python之禅,很多思想是通用的):
113+ 对于什么是好代码,什么是坏代码我现在还没有太多经验,但是最近工作接手别人的代码感觉困难重重,还是too naive啊。每个人实力不同,风格不同,一起协作的时候确实会遇到很多问题和分歧。感觉code review啥的还是很有必要的,可以让菜鸟学习下老鸟的经验,也可以让老鸟指导下菜鸟的失误,同时避免过于个人化的糟糕风格(比如让人想立马离职的高达成百上千行的复杂函数,比如上来一堆不知道干啥的幻数,比如上来就 `form shit import *` 导致俺的编辑工具找不到定义,比如整个项目没有一行测试代码,比如不知道用logger,全用print+眼珠子瞅,一个bug找半天,比如没有pep8检测导致你的环境打开别人的代码彪了一堆警告......)。说好的规范呢,说好的设计模式呢,说好的高内聚低耦合呢?说好的KISS原则呢?说好的DYR原则呢?其实俺只是想多活几年,至少不要到三十岁头发掉光。啥设计模式的可以不用,能干活的代码就行,牢记几个原则,没事的时候对复杂的东西重构下,代码不能自解释的搞搞文档,不被队友坑同时不坑队友,俺就心满意足了 ,遇到坑队友就等着加班和折寿吧:( 。最后还是列举一下常用原则、思想和注意事项吧(最好import this看看python之禅,很多思想是通用的):
114114
115115* KISS原则,Keep It Simple, Stupid。能简单的绝对不要复杂,不要炫耀代码技巧,简单可读最重要,后人会感谢你的。
116116* DRY原则。就算咱不懂设计模式,只要代码复杂重复了就及时抽取出来,至少不会碰到大问题。
117- * YAGNI(You Aren't Gonna Need It),不要猜测性编码。
118- * 快速失败,灵活使用断言。契约式编程(先验条件和后置条件)
117+ * YAGNI(You Aren't Gonna Need It),不要猜测性编码,不用的及时删除,估计以后也不太可能会用到 。
118+ * 快速失败,灵活使用断言。契约式编程(先验条件和后置条件),越早失败,越容易排查错误。
119119* 及时清理技术债务,防止『破窗』。
120+ * 隐藏复杂性。如果复杂性避免不了,应该尽让内部复杂,接口要保持简单易用,而不要因为业务逻辑复杂就堆砌一堆shit.
120121* 一次只做一件事。尽量避免复杂度过高的逻辑,尽量做到代码简单,意图明确。
121122* 高内聚,低耦合。意义相近的东西应该放到同一个地方。写代码的时候想着怎么测试它就能避免过度复杂,耦合严重的代码。
122123* 代码应当易于理解。 《代码大全》、《编写可读代码的艺术》、《代码整洁之道》啥的都是告诉你代码最好自解释,好理解。记住代码首先是给人看的,其次才是让机器执行的,不要过度设计。
123124* 不要过早优化,最小可用原则。先测量,后优化。根据二八定律,大部分性能瓶颈只在20%的部分,这些才是真正需要优化的地方。
124- * 不要炫技,可读性最重要。合适的地方使用合适的技巧,不要过度炫耀语法糖导致维护和理解困难。
125+ * 不要炫技,可读性最重要。合适的地方使用合适的技巧,不要过度炫耀语法糖导致维护和理解困难。大部分人不是造轮子的,你用不着太多奇淫技巧。
126+ * 不要重复发明轮子。遇到问题首选稳定可靠的解决方案。
125127* Think about future, design with flexibility, but only implement for production. 尽量设计良好,避免繁杂和冗余。好的架构和设计都是不断演进的。
126128* 文档化。哪些东西该文档化,哪些该注释需要做好,以便新手可以尽快上手。尽量做到代码即文档,tornado的文档和代码就是典范。
127129* 不要直接吞掉任何错误和异常,一定要做好记录。血泪教训,使用Sentry或其他工具记录好异常发生的信息,为定位bug提供便利,web端的bug一般不好复现。
128- * ......还有的大家可以自己补充
130+ * ......还有的大家可以自己补充。我建议新手可以看看《代码大全》或者《编程匠艺》之中的任何一本,带你快速入门。
129131
130132
131133还有OOP那一套:
@@ -145,10 +147,10 @@ python代码坏味道(新手经常犯的错误)
145147- 不pythonic,写得很业余,真就信了半天学会python
146148- 上来就整一个不知道啥意思的magic number,大学老师没教你不要滥用幻数?
147149- 上来就from shit import *
148- - 复杂函数没有docstring,传入了一个嵌套字典都不注释,娘来
150+ - 复杂函数没有docstring,传入了一个嵌套字典都不注释,娘来。python没有类型声明真是维护代码的一个大坑。
149151- 变量名乱起,看不出类型,加重理解负担。我在想是不是动态语言用匈牙利命名法要好一些
150152- 不遵守pep8,没有pylint检测,打开代码一堆语法警告,老子的编辑器满眼都是warnning,编辑器用不好就老老实实用pycharm,用编辑器就老老实实装好语法检测和pylint检测插件,没有插件请考虑换一个editor
151- - 没有单元测试,不知道怎么写测试(print大法好?)
153+ - 没有单元测试,不知道怎么写测试(print大法好?)。没有一点专业精神,或许和python大部分都是自学的业余选手有关。
152154- 超长函数,没有复用和拆分,我智商低,不能理解好几屏都翻不完的,见谅。这么长居然还tm能工作,牛逼
153155- 到处print,debug的时候加上,上线再删除(累不累亲?),logging模块很受冷落
154156- 上来就try/except了,把异常都捕获了,吞掉异常导致排错困难
@@ -194,4 +196,4 @@ Code Review
194196尽量写出对自己也对其他人负责的代码,上边费了牛劲都是在阐述这个显而易见但是没多少人严格遵守的东西。用动态语言写大型项目维护起来要稍麻烦,
195197很多新手写代码不注重可维护性,甚至自己写的代码回头自己看都一脸懵逼,问了一句这代码TM是干啥的?
196198一开始的负责会为以后协作和维护带来极大便利(当然你想干两天就走让其他人擦屁股就当我没说)。
197- 最后,很多东西我也在摸索,上面的玩意你就当小白的踩坑记录,随着理解和经验的加深我会不定期更新本篇内容。
199+ 最后,很多东西我也在摸索,上面的玩意你就当小白的踩坑记录,随着理解和经验的加深我会不定期更新本篇内容。另外我发现网上大部分是教程性的东西,对于python相关的工程性的东西很少,我很疑惑难道大部分公司的python项目都写得相当规范?没人吐槽?反正我是踩过坑,希望看到过本章的人能把python代码质量重视起来。
0 commit comments