命名关键字和特殊用法

# ### 命名关键字参数
"""
语法:
(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