![每个人的Python:数学、算法和游戏编程训练营](https://wfqqreader-1252317822.image.myqcloud.com/cover/137/44510137/b_44510137.jpg)
1.4.9 函数
函数是一块可复用的代码段,因为有了函数,编程变得更具组织性,使得我们可以将编程的成果积累复用,这就如站在巨人的肩膀上可以眺望更远,使用前辈们积累的代码片段也可以使我们更容易地开发出优质的应用程序。
关于函数,我们前面一直在使用,像操作字符串的函数、操作列表的函数、操作字典的函数等。这些函数都是Python内置的,在实际开发中,只使用内置函数是远远不够的,根据需求的不同,我们需要编写各种各样的函数。在Python中,使用def关键字来定义函数,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T34_12135.jpg?sign=1739042915-xblOjtlzBm7Re5YcxJu74ShxmUme7hpf-0-c87ee34aa27b2a203d3771472c4bcd31)
def关键字定义函数,其后为定义的函数名,Python中的函数体部分通过缩进来限定。如以上代码所示,自定义函数的调用与内置函数的调用方式一样,都是直接通过函数名来进行调用的。上面我们创建的自定义函数非常不灵活,无论怎么调用,其功能都是输出一行字符串“Hello”,假设我们需要向不同的人打印出不同的问候语,上面的函数就不能满足需求了,当然我们可以再定义多个不同的函数,但是这样就失去了函数的最大优势(提高代码复用性),更多时候我们可以通过参数来使函数变得灵活,例如:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T34_12137.jpg?sign=1739042915-TS24SEFTnWREXDUrC6ZfsnRjXL0mroKx-0-032315554078dec09bf4e2078ac4b7c8)
关于函数的参数,还有一些有趣的规则,一般情况下,函数参数的定义与调用时传递的参数的个数和顺序都要一致,例如:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T34_28408.jpg?sign=1739042915-hCJmcWeHvfvoMaMS3kV5aKwNBSLg1b5c-0-bb7ec7b7c06b7b07cf175ea483caffad)
上面的示例代码这种函数传参的方式被称为必备参数传参,在函数调用时参数传递的顺序与函数定义时的参数顺序不同也不是不可以,只是这样需要使用关键字进行传参,例如:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T35_28410.jpg?sign=1739042915-A7fjqsFtOR9Kg57yUrsP1bWCU2eV4RvP-0-31fa14d4320dbd95e2d2c7dc1cacbc98)
使用关键字传参的好处除了参数的顺序自由外,也使参数的意义更加明确。在定义函数时,我们也可以为参数设置默认值,这样在传参时,如果没有特殊的需求,这些有默认值的参数可以省略不传,例如:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T35_28412.jpg?sign=1739042915-BDSmPJjhKWFUL8W5mIjPyJqEcMgErTXc-0-e8efe9d318f309e43c7d2fe44a88cf8a)
在前面使用print函数打印信息的时候,你或许发现了一个有趣的现象:print函数有一个非常神奇的地方,其可以传入任意个数的参数,我们传入多少个数据,print函数就会替我们打印出多少数据。Python中支持定义不定长参数的函数,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T35_28414.jpg?sign=1739042915-iGHQU5Y0T5UphjwEKPdu2fp7Dk9DFMYH-0-41ed5c0996e75427504cbb6e61c94c44)
除了参数外,函数还有一个非常重要的组成部分:返回值。参数是函数的输入,返回值是函数的输出,大部分功能性函数都会有返回值,在函数中使用return关键字来进行数据的返回,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T35_28416.jpg?sign=1739042915-wz0tFldaiL6OtMt7GHxYpjV4mlMqn01k-0-3e727fd1655733fb242cd70be8dec063)