Python中的*args和**kwargs
Posted jums
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的*args和**kwargs相关的知识,希望对你有一定的参考价值。
在Python中,如果我们看过Python源码,那么我们一定看到过这两个东西,*args,**kwargs,那么这是什么呢,我们可以来看看下面这样一段代码,以及输出结果,看完之后,你应该就能明白这二者的意思。
1 import time 2 from functools import wraps 3 4 def logger(func): 5 @wraps(func) 6 def writeLog(*args,**kwargs): 7 start_time = time.time() 8 result = func(*args,**kwargs) 9 print("这是wrap1") 10 endtime = time.time() 11 name = func.__name__ 12 args = [arg for arg in args] 13 info = "[{time}s]({name}->{args},{kwargs})".format(time=round(float(endtime-start_time),6),name=name,args=args,kwargs=kwargs) 14 print(info) 15 return info 16 return writeLog 17 18 19 @logger 20 def show(*args,**kwargs): 21 22 time.sleep(2) 23 24 if __name__ == ‘__main__‘: 25 show("wo","ai",{"1":"2"},d=1,e="gg")
运行结果:
从运行结果中,我们可以看到,“wo”,"ai",{"1":"2"}都是属于*args,而d=1和e="gg"则属于**kwargs,这也就是说,函数中所有的参数,不管是字典型还是字符串型等可变与不可变型的数据结构,都是属于*args;但是如果是这种key=value键值对的形式传入的参数,那么这种参数就属于**kwargs。
还有一种情况,就是如果在*args之前已经定义了一个参数,比如:def show(a,*args,**kwargs)
那么第一参数就是a的值,a之后到键值对中间的部分都是*args的,我们来看看运行结果:
以上是关于Python中的*args和**kwargs的主要内容,如果未能解决你的问题,请参考以下文章