文章目录
- 一、函数的基本概念
- 二、函数的定义和使用
- 1、函数的定义与调用
- 2、函数的参数
- 3、返回多个值
一、函数的基本概念
在使用Python实现某些复杂的功能的时候,容易遇到一些重复率较高的代码,为了代码能够重复使用并提升代码的整洁度,函数这一方式经常被使用。函数可以用来将复杂的问题分解成若干个子问题,同时一旦为了某个子问题编写函数后,就可以在任意时候调用这个函数来实现特定的子功能。
数学中存在函数的概念,表示由自变量到因变量之间的映射关系,Python中的函数也类似,表示将输入经由一定的变化和处理之后得到预定的输出的过程。
例如在列表排序中使用到的函数sorted(),其语法格式为:
sorted(列表,reverse)
其中函数名为sorted,形参为列表和reverse,当给出具体的列表以及reverse具体的值时,即给出了具体的实参,之后就可以返回列表排序之后的内容。
因此函数还存在两个概念:形参和实参。
形参表示在定义函数时给出的参数形式,实参表示在调用定义好的函数时给出的参数具体值。
Python语言中,函数可以分为四类:
- 内置函数,如abs(),sorted()等,编写程序时可以直接使用;
- 标准库函数,安装Python时自带的标准库中的函数,如math、random等,需要使用import导入标准库,然后再使用;
- 第三方库函数,Python社区提供了许多其他高质量的库,如pandas、numpy等,单独下载安装后使用import导入,然后再使用;
- 自定义函数,使用者自己编写的函数。
二、函数的定义和使用
1、函数的定义与调用
定义函数的语法格式如下:
def 函数名([形参列表]):
函数体
在上述内容中,括号中的形参列表部分可以无参数,一个参数或者多个参数,如果有多个参数,每个参数之间用逗号间隔,[]部分在实际编写时需删去。此外圆括号后的“:”是必须有的,下面的函数体与def之间存在空格缩进。
若定义的函数存在返回值,则在函数体中需增加一行return语句,return语句可以有多个,但是一旦第一条return语句执行则函数立即终止,return语句可以出现在函数体的任何位置。
调用函数的语法格式如下:
函数名([实参列表])
在上述内容中,实参列表是指实际传给函数的参数内容,[]部分在实际编写时需删去,实参列表一般需要和函数中的形参列表一一对应。
注:一般来说,形参变量只能接收实参变量的值,而无法访问实参变量,但当实参变量为列表类型时(可变对象),形参会是对该对象的引用,在函数中可以直接修改它里面元素的值。
若函数中存在返回值,则可以在表达式中继续使用,若无,则可以单独作为表达式语句使用。
在上述实例中,函数名为max,形参列表中的参数分别为x1、x2、x3,在函数体中主要进行传入参数的比较,最后使用return语句返回最大值,下方分别使用input函数传入三个键盘输入的数,然后将这三个数作为实参内容传入函数max,之后将返回值赋给变量y,输入y得到相应的最大值。
2、函数的参数
函数中的参数设置决定着函数运行后的结果,参数的设置方式主要有四种,默认值参数、位置参数、名称传递参数以及可变参数。
默认值参数
在声明参数时,如果希望函数的一些参数是可选的,则可以在声明函数时为这些参数指定默认值,调用函数时,若没有传入对应的实参值,则函数使用默认的的参数值,默认值参数需要写在形参列表的最右边。
在上述实例中,x3在调用函数时未传入对应的参数值,则函数使用默认的参数值1。
位置参数
位置参数主要是指在调用函数时,默认按照位置的顺序传递。
在上述实例中,默认按照位置的顺序将实参传递给形参,即x1、x2、x3分别对应着int(num1)、int(num2)、int(num3)。
名称传递参数
名称传递参数主要是指在调用函数时,通过形参的名称传入指定的参数,也被称为关键字参数。
可变参数
在定义函数的时候,使用带一个星号的参数,如*param,则表示传递可变数量的参数,从该参数传入的所有参数将被合并为一个元组。
在上述实例中,存在两次调用函数的情形。第1次调用函数count()时,传递的各科成绩有4门;第2次调用函数count()时,传递的各科成绩有6门。每次传递给函数的“多余”实参都被作为形参的元组fraction收纳,并由此计算出相应的总分和平均分。
此外若使用带两个星号的参数,如**param,则表示传递可变数量的参数,从该参数传入的所有参数将被合并为一个字典。
在上述实例中,编写了一个名为stu的函数,它里面有两个参数,一个是位置参数term,另一个是参数**pern,它是一个用来接收传递过来的字典的参数。
该函数的功能是,先将传入的实参分别传入形参term和**pern,其中后者里的元素会自动保存为字典,然后根据键进行升序排列并输出,最后从pern里挑选出不及格者,组成一个新的字典fail,同时将不及格人数及名单输出。
3、返回多个值
在函数体中使用return语句可以在执行过程中跳出并返回一个值,若要返回多个值则可以返回一个元组。