![零基础入门学习Python(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/693/27111693/b_27111693.jpg)
第6章 函数
6.1 Python的乐高积木
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P78_13731.jpg?sign=1739293446-gArK95XZSeiRlmilSP8P5p7xUXXUOiUX-0-9a181dfceb386345dea55f4a7e52fc77)
视频讲解
小时候大家应该都玩过乐高积木,只要通过想象和创意,就可以用它拼凑出很多神奇的东西。随着学习的深入,编写的代码量不断增加,结构也日益复杂。需要找一个方法对这些复杂的代码进行重新打包整理,以降低代码结构的复杂性和冗杂度。
优秀的东西永远是经典的,而经典的东西永远是简单的。不是说复杂不好,但只有把复杂的东西简单化才能成为经典。为了使得程序的代码变得简单,需要把程序分解成较小的组成部分。这里会教大家三种方法来实现,分别是函数、对象和模块。
6.1.1 创建和调用函数
函数就是把代码打包成不同形状的乐高积木,以便可以发挥想象力进行随意拼装和反复使用。此前接触的BIF就是Python帮我们封装好的函数,用的时候很方便,根本不需要去想实现的原理,这就是把复杂变简单。
因为基础内容奠定了Python编程的基本功底,所以小甲鱼在这些内容的准备上是花足了心思的,大家不要嫌啰唆,经常变着花样儿重复出现的内容肯定是最重要的!
简单来讲,一个程序可以按照不同功能的实现,分割成许许多多的代码块,每一个代码块就可以封装成一个函数。在Python中创建一个函数用def关键字:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P78_69772.jpg?sign=1739293446-wa5YHiNlzE5CY8opc7lhR5vhg2wlkhCV-0-c12bcb6a3b1e427428fe26538e512f86)
注意:
在函数名后面要加上一对小括号。这对小括号是必不可少的,因为有时候需要在里边放点东西,至于放什么,小甲鱼先卖个关子,待会儿告诉你。
我们创建了一个函数,但是从来都不去调用它,那么这个函数里的代码就永远也不会被执行。这里教大家如何调用一个函数,调用一个函数也非常简单,直接写出函数名加上小括号即可:
>>> myFirstFunction() 这是我创建的第一个函数! 我表示很激动… 在这里,我要感谢TBB,感谢CCAV!
函数的调用和运行机制:当函数myFirstFunction()发生调用操作的时候,Python会自动往上找到def myFirstFunction()的定义过程,然后依次执行该函数所包含的代码块部分(也就是冒号后面的缩进部分内容)。只需要一条语句,就可以轻松地实现函数内的所有功能。假如想把刚才的内容打印3次,只需要调用3次函数即可:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P79_69773.jpg?sign=1739293446-BNZrpFJOIKGgd2QUXGW0nha9deg0W6QH-0-04dcc720029c8c5e2416026f979aa234)
6.1.2 函数的参数
现在可以来谈谈括号里是什么东西了。其实括号里放的就是函数的参数,在函数刚开始被发明出来的时候,是没有参数的(也就是说,小括号里没有内容),很快就引来了许多小伙伴们的质疑:函数不过是对做同样内容的代码进行打包,这样与使用循环就没有什么本质不同了。
因此,为了使每次调用的函数可以有不同的实现,加入了参数的概念。例如,封装了一个开炮功能的函数,默认武器是大炮,那用来打飞机是没问题的,但是如果用这个函数来打小鸟,除非是愤怒的小鸟,否则就有点奇葩了。有了参数的实现,就可以轻松地将大炮换成步枪。总而言之,参数就是使得函数可以实现个性化:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P80_69776.jpg?sign=1739293446-hIYYfxm5kx9aoWKBUJp5hWNlY2Nrou5k-0-9a13ba1bb0c19b4a916b44c51372be30)
刚才的例子只有一个参数,使用多个参数,只需要使用逗号隔开即可:
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P80_69777.jpg?sign=1739293446-15zllElLnOyqkspAtff4X0xWAuYMobKI-0-160ebf90c0b286904b4f9bd4ea10b692)
可能有读者要问了,Python的函数支持多少个参数呢?实际上你想要有多少个参数就可以有多少个,就像Windows的某些API函数就有十几个参数。但是建议大家自己定义的函数参数尽量不要太多,函数的功能和参数的意义也要相应写好注释,这样别人来维护你的程序才不会那么费劲!谨记奥卡姆剃刀原理:如无必要,勿增实体。
6.1.3 函数的返回值
有些时候,需要函数返回一些数据来报告执行的结果,比如刚才提到的具有“打炮弹”功能的函数,炮弹是否发射成功,总得有个交代吧。所以,函数需要返回值。其实也非常简单,只需要在函数中使用关键字return,后面跟着的就是指定要返回的值。
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P81_69779.jpg?sign=1739293446-EDRi570SmAY9K0M9DqKh3yQmtjKvFdj6-0-89e3ecc9ade1a4603557580254dce28e)
在Python中,并不需要定义函数的返回值类型,函数可以返回不同类型的值;而如果没有返回值,则默认返回None。
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P81_69780.jpg?sign=1739293446-LV5XAjkIVnybyzVQozCq3zIHsX12WW0L-0-3dc0a06adc81e2c69828df37243e85ea)
另外,如果返回了多个值,Python默认是以元组的形式进行打包。
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P81_69781.jpg?sign=1739293446-O1F0v8Qoe4jySGePRwa43InNZMtlVaPF-0-c79a377106ecacc8593be4aabcfda329)
当然,也可以利用列表将多种类型的值打包到一块儿再返回。
![](https://epubservercos.yuewen.com/94E0F4/15477656504587806/epubprivate/OEBPS/Images/Figure-P81_69782.jpg?sign=1739293446-LhKp0ShkD0UErwrYwU0X4GlqhSJ9yLnx-0-e5a9be324e912714a7968c7251845d6a)