#coding:utf-8

"""
#第一种写法
"""
def func(a,b,c,*,d):
    print(a,b,c)
    print(d)

func(1,2,3,d=4)

"""
#第二种写法
"""
def func(*args,b,c,**kwargs):
    print(args)
    print(kwargs)
    print(b,c)

# 函数调用处
func(1,2,3,4,5,56,a=1,b=2,c=3,d=4,f=5)

print("<====>")
#(3)命名关键字可以指定默认值
def func(a,b,*,c=1,d=5):
    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]
func(*lst,d=90)

def func(a,b,c,*,d,e,f):
    print(a,b,c)
    print(d,e,f)
# 函数调用处
dictvar = {"d":11,"e":12,"f":13}
func(1,2,3,**dictvar)
# func(1,2,3,d=11,e=12,f=13)  #同上**dictvar效果的一样

def func(*args,**kwargs):
    pass

func(*lst,**dictvar)