1.默认参数
在通常情况下,定义函数中的某些参数会填入相同的数据,这时可以给参数设置默认参数,即提前给参数设个数据。设置默认参数的使用形式如下:
函数名(形参1,形参2=数据2):
代码块
return 语句
在给定义函数设置默认参数前,需要了解其使用形式的相关描述,具体有以下3点。
第1点,在定义函数的形参中,“形参2=数据2”表示将数据2(数据2为具体的一个数据值)赋值给形参2,形参2也被称为默认参数。
参数
第2点,默认参数的功能是当调用函数没有填入实参2的数据时,形参2默认填入数据2的值。在每次调用函数时,如果填入的形参数据值都是固定的,可以将此形参设置为默认参数,而相应实参则不用再填入数据值。
第3点,当调用函数传递了实参2的数据值时,实参2的数据值将覆盖数据2的值。
如图示例

第1、2行代码创建了一个名为circle_s的函数,其功能为计算圆的面积。根据圆的面积公式可知
数需要两个参数,分别是圆的半径r和元的大小。π的值通常为3.14、因此参数2中pi默认为3.14。
由于默认pi的值为3.14,因此在调用函数时无须再填入此参数。程序会首先从第3行代码,开始执行传递实参值3并将其复制给形参r,由于实参只有一个参数,默认复制给形参中的变量r,因此执行r*r 执行3*3*3.14,运算结果将返回给变量a。
接下来程序开始执行第4行代码,即将circle_s(5)的实参5复制给形参r,参数pi默认为3.14,执行
回5*5*3.14的结果给变量b。第5行代码输出两个圆的面积之和,输出结果为106.76。
在考虑π的精度时,如果需要提高计算精度,此时可以传递第2个参数以覆盖原来的默认参数值。函数circle_s(6, 3.1415926),此时pi的值被覆盖为3.1415926,而不再是3.14
2.可变参数
当不确定函数中需要接收的参数个数时,可以使用可变参数。在形参前加一个*即可将其转换为可变参数,使用形式如下:
def 函数名(形参1,*形参2):
而相关的使用形式,具体有三点。
第1点,可变参数使用*作为开头。
第2点,可变参数必须位于必填参数的右边以保证必填参数先接收到数据,再将剩余的数据传递给可变参数。
第3点,可变参数以元组形式接收数据
示例代码

第1~6行代码为定义丽数fun3(),其中包含两个参数a和b,参数b前的*表示此参数为可变参数,可以接收
任意多个参数。代码块的内容用于遍历可变参数b的每个值的值,并将a的值分別和可变参数b的每个值相乘并累加。最后使用return返回计算后的结果。
第7行代码调用函数fun3()并按顺序依次传递参数值3.1.2.3.因此形参a接收的值为3。由于b为可变参数,可以接收任意多个参数值,因此1、2、3都传递给了参数b。
3.关键字参数
可变参数以元组的形式存储接收到的数据,而关键字参数以字典的形式存储接收到的数据。关键字参数的使用形式如下:
def 函数名(形参1,**形参2):
而在使用关键词参数前,需要了解其使用形式主要有四点。
第1点,关键字参数的形参使用**开头。
第2点,关键字参数必须位于必填参数的右边,从而保证必填参数会先接收到数据,再将剩余数据传送关键字参数。
第3点,关键字参数以字典的形式接收数据。
第4点,传递给关键字参数的数据包含键和值,其中键和值之间使用等号连接。
如图示例
函数的变量作用范围
根据以前对变量的认识,当变量被赋值后,在后续的代码中都可使用该变量,但在函数内部不能随意使用主代码程序中的变量。根据变量的作用范围可以将变量分为全局变量和局部变量。全局变量指变量在整个代码文件内都可以被使用,局部变量指变量只能在局部范围内被使用。函数中的形参变量和函数内部代码块中的变量都是局部变量。
如图示例

第1~3行代码创建了一个函数fun5(),在fun5()中有形参变量a、b、C,但a、b、c都只能在fun5()函数内里使用,因此在执行第5行代码print(a)时会出现异常错误,因为在fun5()函数外部的代码中并没有对变量a进行赋值,即没有定义变量a。
这就是函数中使用全局变量存在的问题


