*args
打包参数(pack)
拆分参数(unpack)
**kwargs
打包参数(pack)
拆分参数(unpack)
打包(pack):*args是把多个位置参数打包成元组,**kwargs是把多个关键字参数打包成字典。拆分(unpack):*args是把打包了的参数拆成单个的,依次赋值给函数的形参,**kwargs是把字典的键值拆成单个的,依次赋字典的值给函数的形参。
args,kwargs也可以自己定义名称,仅仅是一个约定俗成的写法,没有其他特殊含义,换成其他的也照用不误。
def bar(a, b, c):
print(a,b,c)
bar(**{'a': 1, 'b': 2, 'c': 3})
执行结果:
1 2 3
#*args的用法:当传入的参数个数未知,且不需要知道参数名称时。
用于指定函数传入参数的类型时。*用于参数前面,表示传入的多个参数将按照元组的形式存储,是一个元组; **用于参数前则表示传入的(多个)参数将按照字典的形式存储,是一个字典。args是元组属性
*args 用来将参数打包成tuple给函数体调用def func_arg(farg, *args): print("formal arg:", farg) for arg in args: print("another arg:", arg) func_arg(1,"youzan",'dba','四块五的妞') print("-----------------------") # 输出结果如下: # formal arg: 1 # another arg: youzan # another arg: dba # another arg: 四块五的妞 # ----------------------- #
**kwargs的用法:当传入的参数个数未知,但需要知道参数的名称时(立马想到了字典,即键值对) **kwargs 打包关键字参数成dict给函数体调用kwargs是字典属性
def func_kwargs(farg, **kwargs): print("formal arg:", farg) for key in kwargs: print("keyword arg: %s: %s" % (key, kwargs[key])) func_kwargs(1 ,id=1, name='youzan', city='hangzhou',age ='20',四块五的妞是 = '来日方长的') print('--------------------') # 输出结果如下: # formal arg: 1 # keyword arg: id: 1 # keyword arg: name: youzan # keyword arg: city: hangzhou # keyword arg: age: 20 # keyword arg: 四块五的妞是: 来日方长的 #利用它转换参数为字典 def kw_dict(**kwargs): return kwargs print(kw_dict(a=1,b=2,c=3)) # 输出结果如下: # -------------------- # {'a': 1, 'b': 2, 'c': 3}