第8节-函数一(参数/传参/拆包)
一、函数简介
函数也是一个对象(万物皆对象)
函数中保存的代码需要调用时才会执行
二、函数的参数
定义形参相当于在函数内部声明了变量,但没有赋值
arg1,arg2为形参
def func(arg1,arg2):
codes block
实参相当于给形参赋值,需要与形参一一对应
注意:函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)
print是函数对象 print()是调用函数
三、参数的传递方式
定义形参的时候可以为形参指定默认值,如果用户传递了参数则默认值不生效,没有传递则默认值会生效
位置传参:将对应位置的实参赋值给对应位置的形参
关键字传参:根据参数名进行传递,可以不按形参定义的顺序传递
混合使用时,位置参数必须要放到关键字参数的前面
四、实参的类型
实参可以传递任意类型的对象,包括函数
五、不定长参数
5.1单*号不定长参数
定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
但是如果打印*+变量,那么输出的是拆包后的值
带*号的形参只能有一个,可以和其他参数配合使用,且位置参数必须要放到其前面
*形参只能接受位置参数,不能接受关键字参数
5.2双*号不定长参数
**形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
**形参只有一个,并且必须写在所有参数的后面
*args, **kwargs:混合使用时,*args必须要在**kwagrs的前面
六、参数的拆包
传递实参时,也可以在序列类型的参数前添加*号,这样它会自动的将序列中元素依次作为参数传递
要求序列中的元素的个数必须和形参的个数一致
fn(*dict)/fn(*dict.keys()):传入key值
fn(*dict.values())传入values
fn(*dict.items()):传入key-value的元组