分工协作——模块化编程
数学中的“函数”(function)这一名词,最早是由中国清朝数学家李善兰在翻译《代数学》时使用的。中国古代“函”字与“含”字通用,都有着“包含”的意思。之所以这么翻译,他给出的原因是“凡此变数中函彼变数者,则此为彼之函数”,简而言之,可以理解为“凡是公式中含有变量x,则该式子叫作x的函数”。也即函数是指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量。更普遍意义上的函数是指“对应法则”。例如y=x+2,这个函数中,y与x的函数关系是指y是在x的基础上加2,x、y皆为变量。
函数的作用是把变量之间、集合之间的映射关系进行抽象。在计算机编程语言中,也存在函数,它是编程语言中不可或缺的、非常重要的部分。函数在这里更有“功能”(function)之意。它把对数据的一系列处理(具有某种目标和作用)封装在一起,形成了一个函数。这就像我们在前面提到的面包机,它可以将放入的材料如面粉、酵母、糖等(输入变量),经过一系列的搅拌、烘焙操作之后形成面包,如图4-1所示。
图4-1 函数与功能
请思考采用函数的好处是什么呢?好处是使用方便,利于维护代码,可以重复使用。然而当编写的函数越来越多,都放在同一个文件中时,代码会越来越长,这也给维护带来困难,而且当别人使用这些函数时,虽然不用重新编写,但还是需要进行复制。解决这些问题的办法是什么呢?读者可以观察一下生活中的例子,如共享单车,在房间内共用同一照明设施等。因此,在编程语言中,也可以引入这样的机制。我们将函数写入单独的文件,这样就可以提供给所有人使用;或者更进一步,为了便于管理,还可以将许多函数分组,将完成同一目标的函数放在同一文件中,例如,有些函数是用来画图的,有些是用来统计的,这就像在日常生活中我们将书本、文具、厨具、药品分门别类地放好,这也易于管理和使用。这样每个文件包含的代码就相对较少,还可以提供给用户进行使用。在Python中,这些文件以.py结尾,一个.py文件就称之为一个模块(module),如图4-2所示。下面将分别介绍函数和模块。
图4-2 函数与模块