# ### 命名关键字参数 """ 语法: (1)在函数的定义处,跟在*号后面的参数是命名关键字参数 def func(参数1,参数2,*,参数3,参数4): pass (2)夹在普通收集参数和关键字收集参数之间的参数是命名关键字参数 def func(*args,参数1,参数2,**kwargs): pass 这两种是命名关键字参数; 命名关键字参数在函数调用时,必须用关键字实参的形式调用(除非指定了默认值) """ # (1) 第一种写法 # 函数的定义处 def func(a,b,c,*,d): print(a,b,c) print(d) # 函数的调用处 , 命名关键字必须指定关键字实参进行调用,否则报错 func(1,2,3,d=4) # (2)第二种写法 # 函数的定义处 def func(*args,b,c,**kwargs): print(args) print(kwargs) print(b,c) # 函数的调用处 func(1,2,3,4,a=1,b=2,c=3,d=4,f=5) # (3) 命名关键字可以指定默认值 def func(a,b,*,c=1,d=2): print(a,b) print(c,d) # 命名关键字必须在调用时,用关键字实参,要么调用时使用它的默认值,一旦写了一定指定关键字实参; func(5,6) # * 和 ** 的魔术用法 """ 在函数定义处: * 和 ** 作用:打包 (比如普通收集参数和关键字收集参数) 在函数调用处: * 和 ** 作用:解包 好处: 可以控制参数的长度(优点) 动态产生不定长参数调用时需要用到 * 可以对应str list tuple ** 可以对应dict """ def func(a,b,c,*,d): print(a,b,c) print(d) lst = [1,2,3] # *lst 在列表的前面加* 代表解包操作,把列表当中的元素,一个一个拿出来,当成参数给func调用 相当于func(1,2,3,d=90) func(*lst,d=90) def func(a,b,c,*,d,e,f): print(a,b,c) print(d,e,f) # *dictvar 在字典的前面加** 代表解包操作,把字典当中的元素,一个一个拿出来,当成d=1,e=12,f=13参数给func调用 ,相当于func(1,2,3,d=11,e=12,f=13) 一模一样 dictvar = {"d":11,"e":12,"f":13} func(1,2,3,**dictvar) # func(1,2,3,d=11,e=12,f=13) # 定义处: * 和 ** 是收集参数 ,负责打包 ,一颗星打包成元组,二颗星打包成字典 def func(*args,**kwargs): pass # 调用处 * 和 ** 是魔术用法, 负责解包,一个星是将列表元素拆解成普通实参,二个星是将字典元组拆解成关键字实参 func(*lst,**dictvar) """ # 总结: # 收集参数可以接受所有类型的参数 def func(*args,**kwargs): pass 所有形参顺序: 普通形参 -> 默认形参 -> 普通收集参数 -> 命名关键字参数 -> 关键字收集参数 把作业完成;详见part6 下面作业 练习参数顺序; """
命名关键字和特殊用法
猜你喜欢
转载自www.cnblogs.com/eliwen/p/10742345.html
今日推荐
周排行