Python中的*args和**kwargs - Go语言中文社区

Python中的*args和**kwargs


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")
View Code

 运行结果:

从运行结果中,我们可以看到,“wo”,"ai",{"1":"2"}都是属于*args,而d=1和e="gg"则属于**kwargs,这也就是说,函数中所有的参数,不管是字典型还是字符串型等可变与不可变型的数据结构,都是属于*args;但是如果是这种key=value键值对的形式传入的参数,那么这种参数就属于**kwargs。

还有一种情况,就是如果在*args之前已经定义了一个参数,比如:def show(a,*args,**kwargs)

那么第一参数就是a的值,a之后到键值对中间的部分都是*args的,我们来看看运行结果:

posted @ 2019-05-31 12:45 麦田里的守望者_zhg 阅读(...) 评论(...) 编辑 收藏
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_33521184/article/details/91864335
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 23:28:20
  • 阅读 ( 1027 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢