一、什么是函数?

1.从数学的角度理解函数

学过数学的我们都知道,在数学中,函数是一种特殊的映射关系。其特殊性体现在定义域中的每一个值在值域中有且仅有唯一值与之对应,反之却不成立。如下图所示

注意,不要将上述的值简单理解成如1、2、3等这样的数,它也可能是形如(a0,a1,...,an)的坐标值。

2.数学中的函数与Python中的函数之间的对应关系

有了数学中函数的概念作为基础,我们可以利用类比的方法更快地去认识Python中的函数。其对应关系如下表:

用一句话概括:Python中的函数是指能对给定的输入变量进行一定的模式化处理(即函数体),最终实现某种功能或得到某个结果的具有特定结构的代码。

二、什么是类以及类与函数的关系

既然函数已经可以实现特定的功能了,那为什么还要定义类这一数据类型呢?在我看来,类的使用源于分工和模块化的思想,其本质在于函数功能的内在联系性。

假如我们要在Python中编程实现一个手机,这个手机有三个功能:打电话、发短信和上网;同时这个手机有三个属性:品牌、价格和颜色。

如果不采用模块化的思想,我们当然可以将所有的功能用一个函数实现,而属性我们则可以使用全局变量进行存储。但是这样做的后果就是代码臃肿且移植性差。定义两个功能稍有不同的手机就需要将代码全部重写一遍,这样显然是不划算的。聪明的程序员当然不会采用这种笨办法,而是选择先造出一个通用的手机模板。这个模板中,程序员将手机的功能细分,用三个不同的函数分别实现了打电话、发短信和上网的功能,同时在手机上预留出涂颜色、印品牌logo和标注价格的地方。每当需要生产一个新手机,就用模板复制出一个手机,最后涂上颜色、印上品牌loge以及标注好价格即可。这个手机模板就是Python中的类,这里可以称之为手机类;这个用模板生产手机的过程,就是类的实例化。而实生产过程中根据要求涂颜色、印logo等行为就是类的初始化。如下图所示:

因此,类是若干具有内在关联的函数和属性的集合。类的功能依托于类中的函数实现,可以实现较单一函数更为复杂的功能。而为了以示区别,我们把定义在类中的函数称为方法。也即方法其实也是函数,且专指定义在类中的函数。