函数的参数及返回值
1、位置参数
- 位置参数是指函数调用时传递实参的顺序与定义函数的形参顺序一致,如例所示。
-
在例中,第1、2行定义printInfo()函数。第3行调用该函数,其数据传递如图所示。第4行将两个实参的位置调换,则发生错误。
-
在图中,当函数调用时,实参的传递顺序与定义函数形参的顺序需保持一致。由于实参的顺序与函数定义时形参的位置有关,因此称为位置参数。
2、关键参数 -
关键参数是指通过对形参赋值传递的参数。关键参数允许函数调用时传递实参的顺序与定义函数的形参顺序不一致,因为 Python解释器能够用形参名匹配实参值,使用户不必记住位置参数的顺序,如例所示。
运行结果如图所示。
-
在例中,第1~2行定义printInfo()函数。第4行调用函数,其参数是根据函数定义时形参的名称进行数据传递,因此称为关键参数。
3、默认参数 -
如果在函数定义时参数列表中的某个形参有值,就称这个参数为默认参数。注意默认参数必须放在非默认参数的右侧,否则函数将出错,如例所示。
运行结果如图所示
- 在例中,第3行调用函数时,由于定义函数时形参school有默认值’千锋教育’,因此调用时可以省略不写该参数。如果想修改默认值,则在调用时传入该参数即可,如本例中的第4行。
- 默认参数可以让函数的调用更加简化,就如同安装PC端软件时,程序会提示用户默认安装路径,当然用户也可以自定义安装路径。
此外,如果将例题中的name与school调换位置,具体示例如下:
程序运行后,将会报错,如图所示
4、不定长参数
-
在前面对函数的介绍中,一个形参只能接收一个实参。除此之外,函数形参可以接收不定个数的实参,即用户可以给函数提供可变长度的参数,这可以通过在形参前面使用*来实现,如例所示。
-
此外,不定长参数还可以接受关键参数并将其存放到字典中,这时需要使用**来实现,如例所示
-
此外,通过*还可以进行相反的操作,如例所示。
-
另外,通过**可以将字典转换为关键参数,如例所示。
-
此外,需注意上述两种方式的传递顺序,如例所示。
5、传递不可变与可变对象
- 在Python中,数字、字符串与元组是不可变类型,而列表、字典是可变类型,两者区别如下
- 不可变类型——该类型的对象所代表的值不能被改变。当改变某个变量时,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
- 可变类型——该类型的对象所代表的值可以被改变。变量改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟出新的地址。
- 接下来演示调用函数时传递不可变与不可变对象,如例所示。
运行结果如图所示。
6、函数的返回值
- 当函数具有多个返回值时,如果只用一个变量来接收返回值,函数返回的多个值实际上构成了一个元组,如例所示。
运行结果如图所示。