零基础入门学习Python(第2版)
上QQ阅读APP看书,第一时间看更新

第6章 函数

6.1 Python的乐高积木

视频讲解

小时候大家应该都玩过乐高积木,只要通过想象和创意,就可以用它拼凑出很多神奇的东西。随着学习的深入,编写的代码量不断增加,结构也日益复杂。需要找一个方法对这些复杂的代码进行重新打包整理,以降低代码结构的复杂性和冗杂度。

优秀的东西永远是经典的,而经典的东西永远是简单的。不是说复杂不好,但只有把复杂的东西简单化才能成为经典。为了使得程序的代码变得简单,需要把程序分解成较小的组成部分。这里会教大家三种方法来实现,分别是函数、对象和模块。

6.1.1 创建和调用函数

函数就是把代码打包成不同形状的乐高积木,以便可以发挥想象力进行随意拼装和反复使用。此前接触的BIF就是Python帮我们封装好的函数,用的时候很方便,根本不需要去想实现的原理,这就是把复杂变简单。

因为基础内容奠定了Python编程的基本功底,所以小甲鱼在这些内容的准备上是花足了心思的,大家不要嫌啰唆,经常变着花样儿重复出现的内容肯定是最重要的!

简单来讲,一个程序可以按照不同功能的实现,分割成许许多多的代码块,每一个代码块就可以封装成一个函数。在Python中创建一个函数用def关键字:

注意:

在函数名后面要加上一对小括号。这对小括号是必不可少的,因为有时候需要在里边放点东西,至于放什么,小甲鱼先卖个关子,待会儿告诉你。

我们创建了一个函数,但是从来都不去调用它,那么这个函数里的代码就永远也不会被执行。这里教大家如何调用一个函数,调用一个函数也非常简单,直接写出函数名加上小括号即可:

     >>> myFirstFunction()
     这是我创建的第一个函数!
     我表示很激动…
     在这里,我要感谢TBB,感谢CCAV!

函数的调用和运行机制:当函数myFirstFunction()发生调用操作的时候,Python会自动往上找到def myFirstFunction()的定义过程,然后依次执行该函数所包含的代码块部分(也就是冒号后面的缩进部分内容)。只需要一条语句,就可以轻松地实现函数内的所有功能。假如想把刚才的内容打印3次,只需要调用3次函数即可:

6.1.2 函数的参数

现在可以来谈谈括号里是什么东西了。其实括号里放的就是函数的参数,在函数刚开始被发明出来的时候,是没有参数的(也就是说,小括号里没有内容),很快就引来了许多小伙伴们的质疑:函数不过是对做同样内容的代码进行打包,这样与使用循环就没有什么本质不同了。

因此,为了使每次调用的函数可以有不同的实现,加入了参数的概念。例如,封装了一个开炮功能的函数,默认武器是大炮,那用来打飞机是没问题的,但是如果用这个函数来打小鸟,除非是愤怒的小鸟,否则就有点奇葩了。有了参数的实现,就可以轻松地将大炮换成步枪。总而言之,参数就是使得函数可以实现个性化:

刚才的例子只有一个参数,使用多个参数,只需要使用逗号隔开即可:

可能有读者要问了,Python的函数支持多少个参数呢?实际上你想要有多少个参数就可以有多少个,就像Windows的某些API函数就有十几个参数。但是建议大家自己定义的函数参数尽量不要太多,函数的功能和参数的意义也要相应写好注释,这样别人来维护你的程序才不会那么费劲!谨记奥卡姆剃刀原理:如无必要,勿增实体。

6.1.3 函数的返回值

有些时候,需要函数返回一些数据来报告执行的结果,比如刚才提到的具有“打炮弹”功能的函数,炮弹是否发射成功,总得有个交代吧。所以,函数需要返回值。其实也非常简单,只需要在函数中使用关键字return,后面跟着的就是指定要返回的值。

在Python中,并不需要定义函数的返回值类型,函数可以返回不同类型的值;而如果没有返回值,则默认返回None。

另外,如果返回了多个值,Python默认是以元组的形式进行打包。

当然,也可以利用列表将多种类型的值打包到一块儿再返回。