一、函数的创建
如图所示
二、函数的参数传递
函数调用的参数传递
位置实参:
根据形式参数对应的位置进行实际参数的传递
关键字实参:
根据形式参数名称进行实际参数传递
结论:
如果是不可变对象,在函数体的修改不会影响到实际参数的值,arg1的修改为100,不会影响到n1的值
如果是可变对象,在函数体内的修改回影响到实际参数的值,arg2的修改,append(10),回影响到n2的值
三、函数的参数定义:
1、函数定义默认值参数:
函数定义时,给形式参数设置默认值,只有与默认值不符合的时候才需要传递实参。
例如:
只传一个参数,b采用默认值
传2个参数,2将默认值10替换
2、个数可变的位置形式参数
-定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置形式参数
-使用*定义个数可变的位置参数
-结果为一个元组
3、个数可变的关键字形式参数
-定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
-使用**定义个数可变的关键字形参
-结果为一个字典
-
4、错误的位置形式参数定义、错误的关键字形式参数定义
def fun2(*args,*a):
pass
以上代码,程序会报错,个数可变的位置参数,只能为1个
def fun2(**args,**a):
pass
以上代码,程序会报错,个数可变的关键字参数,只能为1个
在一个函数的定义过程中,既有个数可变的关键字形式参数,也有个数可变的位置参数,
要求个数可变的位置参数,放在个数可变的关键字参数之前
def fun(*args,**kwargs):
pass
四、函数的调用
在函数调用时,将列表(元组、集合)中的每一个元素都转换为位置实参传入;
在函数调用时,将字典中的键值对都转化为关键字实参传入;
例题:
需求:c和d只能采用关键字实参传递
从✳号之后的参数,在函数调用时,只能采用关键字参数传递,将*称为关键字警察