Python程序设计开发宝典
上QQ阅读APP看书,第一时间看更新

第5章 代码复用技术(一):函数

在软件开发过程中,经常有很多操作是完全相同或者是非常相似的,仅仅是要处理的数据不同而已,因此经常会在不同的代码位置多次执行相似甚至完全相同的代码块。很显然,从软件设计和代码复用的角度来讲,直接将代码块复制到多个相应的位置然后进行简单修改绝对不是一个好主意。虽然这样可以使得多份复制的代码可以彼此独立地进行修改,但这样不仅增加了代码量,也增加了代码阅读、理解和维护的难度,为代码测试和纠错带来很大的困难。一旦被复制的代码块将来某天被发现存在问题而需要修改,必须要对所有的复制都做同样的正确修改,这在实际中是很难完成的一项任务。更糟糕的情况是,由于代码量的大幅度增加,导致代码之间的关系更加复杂,很可能在修补旧漏洞的同时又引入了新漏洞,维护成本大幅度增加。因此,应尽量减少使用直接复制代码的方式来实现复用。解决这个问题的有效方法是设计函数(function)和类(class)。本章介绍函数的设计与使用,第6章介绍面向对象程序设计。

将可能需要反复执行的代码封装为函数,然后在需要该功能的地方调用封装好的函数,不仅可以实现代码的复用,更重要的是可以保证代码的一致性,只需要修改该函数的代码则所有调用位置均得到体现。同时,把大任务拆分成多个函数也是分治法的经典应用,复杂问题简单化,使得软件开发像搭积木一样简单。当然,在实际开发中,需要对函数进行良好的设计和优化才能充分发挥其优势,并不是使用了函数就万事大吉了。在编写函数时,有很多原则需要参考和遵守,例如,不要在同一个函数中执行太多的功能,尽量只让其完成一个高度相关且大小合适的功能,提高模块的内聚性。另外,尽量减少不同函数之间的隐式耦合,例如,减少全局变量的使用,使得函数之间仅通过调用和参数传递来显式体现其相互关系。再就是设计函数时应尽量减少副作用,只实现指定的功能就可以了,不要做多余的事情。最后,在实际项目开发中,往往会把一些通用的函数封装到一个模块中,并把这个通用模块文件放到顶层文件夹中,这样更方便管理。