您的位置:首页 > 编程语言 > Python开发

菜鸟写Python程序的建议|文末送USB小风扇

2019-08-04 09:10 459 查看

最近小密圈来了很多小伙伴,有不少人后台咨询我如何写好Python,尤其是新手;而且小密圈最近也有一个爬虫+数据库的实战活动,编码比较多。这篇是我以前写的文章,我觉得非常不错,强烈建议小伙伴看看。


入门不久的菜鸟会问Python代码应该怎么写,其实写代码如同写文章,好的文章是改出来的,好的诗句是推敲出来的,那么好的代码呢,好的代码一定是重构出来的!今天我来总结一下如何从菜鸟变成老手的建议,也许对大家有帮助,不当之处多包涵。



我们通常写一个程序的时候,都会经历从单->双->多,从硬编码到柔编码,基本上都会经历下面的这几步,其实代码是讲究柔术的。上面是总览图,我们接着来一一解释。


1先让程序跑起来


当我们刚开始写一个程序的时候,无论是一个自动化脚本,还是一个小游戏,还是一个爬虫,还是一个模块,对于新手来说最简单的方法就是先work:

  • 用最直接的方法,让程序先能work.

  • 比如直接用函数写,直接用假的变量,先把程序运行起来

  • 运行正常的逻辑,让程序跑通



2初步重构代码


当你的代码已经初步run起来之后,接着我们要对代码进行简单的梳理和整形,会从下面几个地方修剪修剪:

  • 变量名,函数名字的重构

  • 函数的状态要不要有返回值

  • if else这样的嵌套太多,考虑提取

  • 函数进行提取和重构,每个函数的功能单一原则

  • 函数的参数有没有考虑缺省值

  • 全局变量,有没有大写,有没有写在开头



3增加注释


代码修剪过之后,发现利索多了,这个时候要趁热打铁把注释写上去!

  • 很多同学不太爱写注释,觉得麻烦。如果这个代码就你一人用,或者说这个代码很短,确实可以不写!

  • 如果这个代码有几千行,并且会多个人合作开放,后续还要扩展功能,那么你花5分钟来写注释,未来会帮你节省5个小时的维护时间!

  •  代码首先是给人看的,然后才是给机器运行的!



4一定要考虑异常


代码跑的好好的,看起来没有问题,是不是很有成就感!

  • 如果是爬虫,你把网络断了,看看有没有异常处理

  • 如果是文件,你把句柄改成None看看有没有问题

  • 如果取列表里面的item,当你获得列表为空,会发生什么

所有的这一切,你有没有考虑到异常,有没有考虑到程序的健壮性。

  • 要考虑异常分支,if 里面有没有else的情况

  • for里面如果出现了错误,有没有break

  • 判断list[],需要看一下这个列表是否为空

  • 文件读写,有没有try/except

  • 拿到一个句柄,比如SSH,SQL,这样有没有考虑到句柄的有效性


5添加配置文件


我们刚从把局部变量,提到了全局变量。现在我们需要把这个全局变量放到一个配置文件里面,把实现和接口分离,降低耦合度。对于用户来说只要改配置文件就行了。


比如可以把整个的全局变量放到一个config.py里面,然后在主程序里面用from config import * 这样的话,对后续的修改方便很多。


6测试用例很重要


程序虽然写好了,不管你的程序是几十行的小程序小脚本,还是几千上万行的项目,测试用例是一定要设计。


简单的程序可以设一些断言assert,看一些有无异常,对于复杂的逻辑,一定要针对性的设计多个分支回路来测一下代码。



7日志模块很重要


有同学说上面6步之后,我感觉代码已经很不错了,这么还有进化!Python的代码很多都是在服务区上运行的,你总不能一直都是print吧,尤其是对大型的程序,没有日志怎么行,建议用logging模块进行日志的记录



8性能上的优化


如果你处理的任务仅仅是几百上千,对性能要求不高,对实时性要求不高那还好。如果你要处理几十 7ff7 万条数据呢!


我记得我有一次爬stackoverflow的数据,有96万的数据,你不用并发,估计等程序运行完,你已经睡着啦! 


这个时候一定要考虑并发的处理,到底是用多进程,还是多线程,线程池,还是用协程,需要思考!


当然性能上的优化并不单是单线程变多线程,还有数据结构的优化,比如什么时候该用列表,什么时候用元组,哪一种对内存消耗少,查询快。



9再次重构,函数变类


为了让我们的代码更加易于扩展,适应变化!我们需要用类把变量和函数进行封装,设计一些接口,那些是对外开发的,那些是对外封闭的。


哪些用静态函数包裹,哪些用实例方法。是不是需要用一些装饰器来简化代码。

  • 相同类别的函数,进行整合,合并要一个类里面。

  • 多个功能用多个类来表示,方便维护和扩展。

  • 类与类之间,考虑他们的内在关系。用组合还是继承,用一些简单的设计模式,根据程序的特性用比如工厂模式,观察者。

10代码检查


代码到这里应该是比较优美了,等一下是不是忘记了一个很重要的东西,我们有没有遵循PEP8的代码风格


比如命名规范,每一行的长度,看似是细节,但是很多时候细节决定成败。为啥不用这个神器检查一下Pylint库,它能快速帮你查缺补漏。


上面这10条就是一个菜鸟写代码的总结和反思,也许对大家有用。


下面是福利时间:

最近的天气非常非常热,这次送出2个USB的小电扇,我们设定了一个的小门槛,回答出这道很简单的Python题目的同学,可以参与抽奖!题目在今天的头条文章文末,有兴趣的同学可以参与。
送出2个小风扇

答案是一个很长的数字,大家把答案写出来,写在公众号后台,[strong]公众号后台,[/strong]公众号后台,答对的即可抽奖! 公众号后台 如下)


开奖的时间是8/6 晚上20:00,大家有几天的时间答题。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: