day10:函数的实参&形参
函数的参数 (参数:配合函数运算的值) 1.普通形参 # 1.普通形参 # 函数的定义处 """hang,lie是函数的普通形参""" def s_star(hang,lie): i = 0 while i < hang: j = 0 while j < lie: print("*",end="") j+=1 print() i+=1 函数的调用处 10,10 是函数的实际参数""" s_star(10,10) s_star(3,8) 2.默认形参 2.默认形参 def s_star(hang=10,lie=10): i = 在函数调用时: 如果给予实参,那么直接使用实际参数 如果没有给予实参,那么使用参数默认自带的值 s_star() 10行10列小星星 s_star(3,8) 3行8列小星星 s_star(4) 4行10列小星星 3.普通形参+默认形参? 默认形参必须跟在普通形参的身后,顺序是一定的 3.普通形参 + 默认形参def s_star(hang,1)"> 函数的调用处 s_star(3,3) 3行3列 s_star(3) 3行10列 s_star() error 4.关键字实参 关键字实参是对具体的某个参数赋值,具体的顺序可以打乱 4.关键字实参 函数的定义处 () i+=1 函数的调用处 s_star(hang=4,a=1,b=2,c=3,d=4,lie=5) s_star(c=3,lie=5,hang=4,b=2) 关键字实参参数顺序可以打乱 5.普通实参+关键字实参 关键字实参必须跟在普通实参的身后,1)"> 5.普通实参 + 关键字实参 s_star(5,6,99,c=7,d=8,lie=9) s_star(c=7,lie=9,5,99) error 关键字实参必须跟在普通实参的后面 s_star(5,1,c=2,d=3,lie=10,b=5) ok s_star(5,a=5) error 重复给a赋值,错误 6.要注意区分默认形参和关键字实参 默认参数和关键字实参 在写法上一模一样 7.普通收集参数 *args 1.普通收集参数: 专门用来收集多余的没人要的普通实参 def func(*args): code... *args => arguments(参数) 在args这个参数的前面加上一个*表达普通收集参数,形成一个元组 """ 基本使用 def func(a,*args): print(a,c) 1 2 3 print(args) (4,7,8) func(1,2,3,4,8) 计算任意个数的累加和 def func(*args): total =for i in args: total += i (total) func(1,10,11,100) 8.关键字收集参数 **kwargs 2.关键字收集参数 : 专门用来收集多余的没人要的关键字实参 def func(**kwargs): code1... **kwargs => keyword arguments 在kwargs参数的前面加上2个**表达关键字收集参数,形成一个字典 def func(a=1,**kwargs): (a,c) print(kwargs) {'f': 1,'g': 2,'j': 3} func(f=1,g=2,j=3,a=15,b=16,c=17 任意个数字符串的拼接 班长:宋云杰 班花:刘彩霞 班草:刘子涛 吃瓜群众:牧树人,晏国彰,刘聪 def func(**(kwargs) 定义一个字典,存放每一位同学的身份 dic = {monitor":班长class_flower班花class_grass班草"} strvar1 = strvar2 = "" 遍历字典中的键值对 for k,v kwargs.items(): print(k,v) monitor 宋云杰 class_flower 刘彩霞 class_grass 刘子涛 .... 判断键是否在字典当中,如果在,获取对应的身份,拼装成字符串 if k dic: strvar1 += dic[k] + :" + v + n" 班长 + ":" + 宋云杰 + 'n' else: strvar2 += v + ," 去掉右边多余的n和,形成最后的效果 (strvar1.strip()) 吃瓜群众:"+ strvar2.rstrip()) func(monitor=宋云杰刘彩霞刘子涛牧树人晏国彰刘聪") 9.命名关键字参数 3.命名关键字参数 定义命名关键字参数的两种方式: (1)def func(a,*,c) c是命名关键字 (2)def func(*args,**kwargs) c是命名关键字参数 在函数调用时,必须使用命名关键字参数来进行赋值 定义方式一 1 2 print(d) 3 print(c) 10 定义方式二 def func(*args,1)"> (1,6) 100 {'a': 1,'b': 2,'d': 6} func(1,d=6,c=100) 10.关于* 和 ** 的使用方法 * 和 ** 在函数的定义处,用来做收集操作,打包 * 解包列表 (c,d) lst = [1,2] *把列表里面的所有元素拿出来,当成参数一个一个赋值给func进行调用 func(*lst,d=4 ** 解包字典 c":3,1)">d":4} **把字典里面的所有元素拿出来,拼装成键=值的参数形式,赋值给func进行调用 func(1,**dic,) func( c=3,d=4 ) *和**的组合 func(*lst,1)">dic) strvar = abc" print(*strvar) 11.形参定义的顺序 当所有参数都在一起的时候,按照什么顺序定义呢? 12.关于所有参数混合的练习题 def f1(a,c=0,*args,1)">kw): 'a =',1)">b =c =args =kw ='def f2(a,1)">d = 以上两个函数 打印结果 第一题 f1(1,2) a=1,args=(),kw={} f1(1,c=3) ab') f2(1,d=99,ext=None) 第二题 args = (1,4) kw = {': 99,1)">x': #} f1(*args,**kw) 第三题 myargs = (1,3) mykw = {': 88,1)">} f2(*myargs,**mykw) a=1,d=88,kw={x:#} 第四题 (d) f1(1,d=67,x=99,y=77) (编辑:李大同) |