Python 编程,应该养成哪些好的习惯?

我以为编程习惯很重要的,一开始就养成这些习惯,不仅可以提高编程速度,还可以减少 bug 出现的概率。希望各位分享好的编程习惯。
关注者
2646
被浏览
80735

26 个回答

我在模块还没认全,元类、类方法和静态方法的区别、装饰器写的还不溜等还不懂的时候,就开始注意让写的代码尽量Pythonic和符合PEP8标准。


到现在,基本手写的都是符合标准的Python代码。我写代码力求如下几点:

1. 简单,调用链简单,不用写注释,同事看我代码,除了我的命名比较简陋不高大上以外,应该没有难度。

2. 不炫技。力求粗暴实现功能,只在合适的地方用合适的方法。

3. 不给其他同事机会吐槽。除了变量命名偶尔会被其他同事鄙视以外,一般很少有人对我的代码抽象能力,性能提供评价意见。

4. 时间允许情况下尽量把代码写完美。一般我的代码都是merge后就不动了,因为没啥可重构的机会... 除非有BUG。哦,我的BUG数量应该是很少的。


这不是一个自吹自擂的答案。


我和我们组在控制代码质量上面做了很多工作,上段时间我写了篇专栏 保证代码质量二三事 - Python之美 - 知乎专栏 ,BTW,dennis还打赏了5块钱(ÒωÓױ)。


作为一个过来人,我一定要给关注了和看这个问题的同学提点经验。


首先看一下我刚到豆瓣第二周提的一个PR来给大家乐呵一下:



这个页面来着豆瓣自己造的团队协作工具 CODE(Douban CODE)。这个PR包含9百多行代码,但是其中包含了700多行thirft自动生成的。 看一下评论数 「164」,感受下一个觉得自己代码写的不错的人,被团队其他人这么吐,我的心理阴影。


为什么会造成这么多呢:


1. 豆瓣有一些工程上的习惯甚至黑魔法,团队有自己的规范。

2. 代码写的不好。

3. 来豆瓣前我是一路自学的野路子,我还算对自己写的代码要求高,但是好多细节上既有理解问题也有代码实现的问题。


那么,假如你现在对自己很放纵,但是还挺有追求希望去更好的团队,到更高的平台,防止遇到我们这些人被喷的第二天不想去上班。如下编程习惯一定要有:


1. PEP8。 这个大家都知道了,在我们组,PEP8不过你的PR都基本没人理,吐都懒得吐。但是PEP8里的要求还挺多,怎么办呢?没办法,熟能生巧尔。推荐看 PEP8: The Style Guide for Python Code , requests作者做的,更友好和直观。不熟的时候除了在终端执行下pycodestyle(也就是原来的pep8),还可以给自己的编辑器配上一些自动做PEP8检查的插件。

2. Pythonic。写程序最大的特点就是你可以用多种方法实现同一个功能,但是我能分辨出来那个更Pythonic,那个明显是XX语言转型过来的程序员写的。一般只有一种是最优解,代码最简练执行效率也最高,这个也没啥办法,就是要靠你日常的搜集和自己的不断提高。我现在翻看2年前的代码觉得不忍直视,希望2年后看今天自己写的代码也有这种感觉 。

3. 搜索能力。你没有能力和精力完成所有的事情,有些时候需要去找答案,至少是找个灵感。所以学习从Google、Github、Stackoverflow等网站找到自己需要的东西是一个很好的习惯,以后你会感谢自己这个好习惯。

4. 善用Python标准库。很多功能的最佳实践其实在标准库中,不要一味的自己吭哧吭哧造,造多了你会发现很多都无意义,浪费了时间甚至把你带偏了。

5. 找到一整套完成工作的最佳流程。这个有点大,其实就是配置一个趁手的编辑器,俺强推spacemacs,多花时间用好它;找到一个调试bug的方式,出现问题你要有一系列定位问题,跟踪问题,解决问题的方案,让你非常快的完成工作,而不是漫无目的的每次看心情去debug,必须有「套路」。

6. 尽能力熟悉工作中常用的工具和项目。比如用Flask,有空读读它的源码,这样出了问题,会对你找到原因很有帮助,我现在经常受益于这条。没看过源码就敢在产品线用的人都是「银才」。

欢迎关注本人的微信公众号获取更多Python相关的内容(也可以直接搜索「Python之美」):

weixin.qq.com/r/D0zH35L (二维码自动识别)

有人提到要严格遵照PEP 8规定的Python Coding Style来写,要多读英文文档,多看看一些优秀的库(比如requests)

其实这一切的一切,用Jetbrain的 PyCharm IDE就好啦:
Python IDE &amp Django IDE for Web developers : JetBrains PyCharm

- 免费,全平台(Win、MacOS、Linux),为Python带来完整的IDE体验

- 体验不输同门的IntelliJ (IntelliJ是什么水平呢?对我来说,IntelliJ在写Java上面的体验是吊打Eclipse的)

- 自动提示Coding Style:函数之间空两行,4空格缩进,函数名称写法 etc,统统会提示你!比某个PEP8检查script来的更加方便

- 可以随意点击任何函数、某个lib,对所有python内置lib、和已经安装了的第三方lib都有效,可以迅速打开该第三方函数的实现,方便查看其文档&实现细节(这就不用手动去python lib目录下一个个去翻了,对于学习优秀的第三方lib特别有帮助)

- 包括有人提到的Unit Test,PyCharm也提供one-click生成test case

总之,我推荐刚入门Python的大家,尽早的使用PyCharm来开发,那感觉就如同一个经验丰富的大师,手把手盯着你编程 ^^