1.关键字参数
函数定义时,形参以一般参数名形式定义:
(1)函数调用,实参为一般形式,则按照位置给对应实参赋值。
(2)函数调用,实参为关键字参数,实参的输入顺序没有影响,形参根据关键字赋值。
2.位置参数函数定义时,新参以关键字参数形式定义:
(1)函数调用时,实参都为空,形参按照定义赋值。
(2)函数调用时,实参按序给出,新参按照实参位置对应赋值。
(3)函数调用时,实参乱序给出,实参要以关键字参数形式给出,未给出实参的,形参按照定义赋值。
3.收集参数3.1函数定义时‘ * ’参数:将实参收集为元组,实参不能是关键字参数.
(1)‘ * ’ 将所有实参都放入同一个元组中,有几个实参就会形成几个元素的元组。
(2)‘ * ’ 将第二个及之后的所有实参都放入同一个元组中。
(3)未用关键字参数前,调用函数给定的参数从第二个到最后一个默认为name,所以提示丢失第三个参数num2。在使用关键字参数后,就能识别第三个参数了。
3.2函数定义时’** ‘参数:将实参收集为字典,实参必须是关键字参数形式.
(1)'**'收集实参必须是关键字参数形式,函数将所有实参收集到字典中。
(2)'**'收集实参必须是关键字参数形式,函数将第二个及之后所有实参收集到字典中。
(3)'**'收集实参必须是关键字参数形式,函数将第二个及之后第一个关键字参数前的实参收集到元组,该关键字参数及之后的所有实参收集到字典中。因为'*'不处理关键字参数,'**’只处理关键字参数。如果输入实参不对会报错。
(4)定义函数时:' ** '参数必须为函数的最后一个参数.
4.函数练习
4.1一次只能存储一个名字
解析这个例子:
init( )函数初始化字典为data={ ‘first’: { } , ’middle’ :{ }, ’last’ : { } }
lookup( )函数返回外层字典项k=lable对应的内层字典中k=name的v值。(观察init()知data[lable][name]为空)
store( )函数:由于data[lable][name]为空常为空,第一个print(people)为0。
由于for循环,名字由三部分组成,所以循环体执行三次,所以输出三次None。
经过store()函数处理后,data={'first':{'wang':'wang wei na'},'second':{'wei':'wang wei na',},'last':{'na':'wang wei na',}}
4.2 同时存储多个名字store()函数处理第一个名字时,data['first']['wang']=0,data['second']['wei']=0,data['last']['na']=0,
data={'first':{'wang':'wang wei na'},'second':{'wei':'wang wei na',},'last':{'na':'wang wei na',}}
store()函数处理第二个名字时,data['first']['wan']=0,data['second']['']=0,data['last']['yu']=0,
data={'first':{'wang':'wang wei na','wan':'wan yu'},'second':{'wei':'wang wei na',' ':'wan yu'},'last':{'na':'wang wei na','yu':'wan yu'}}
store()函数处理第三个名字时,data['first']['wang']=1,data['second']['bao']=0,data['last']['bao']=0,
data={'first':{'wang':['wang wei na','wang bao bao'],'wan':'wan yu'},'second':{'wei':'wang wei na',' ':'wan yu','bao':'wang bao bao'},'last':{'na':'wang wei na','yu':'wan yu','bao':'wang bao bao'}}
其他名字一次处理。
4.3参数练习