Python代码中func(*args, **kwargs)的参数*args和**kwargs的意思解析

时间:5年前   阅读:9765

这是Python函数可变参数 args及kwargs

*args表示任何多个无名参数,它是一个tuple

**kwargs表示关键字参数,它是一个dict

def foo(*args,**kwargs):
    print ('args=',args)
    print ('kwargs=',kwargs)
    print ('**********************') 

if __name__=='__main__':
    foo(1,2,3)
    foo(a=1,b=2,c=3)
    foo(1,2,3,a=1,b=2,c=3)
    foo(1,'b','c',a=1,b='b',c='c')

执行结果如下:

args= (1, 2, 3)
kwargs= {}
**********************
args= ()
kwargs= {'a': 1, 'b': 2, 'c': 3}
**********************
args= (1, 2, 3)
kwargs= {'a': 1, 'b': 2, 'c': 3}
**********************
args= (1, 'b', 'c')
kwargs= {'a': 1, 'b': 'b', 'c': 'c'}
**********************

补充说明:遇到一个很有意思的bug,在使用多线程threading时,标注的那一行的逗号不能去除(否则会报错未传参数),而如果传递的参数是两个,则末尾的逗号可以去除。猜测这里的逗号起到表示该参数为tuple类型。

for item in items:
    t = threading.Thread(target=get_content, args=(item,))#,不能去除,会报错    
    t.start()    # get_content(base_fq=item)

版权声明:本文为期权记的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://www.qiquanji.com/post/198.html

微信扫码关注

更新实时通知

上一篇:50ETF期权涨幅为什么会那么大?

下一篇:python函数修饰符@的使用:被修饰函数不带参数,wraps使用,被修饰函数带参数,修饰符带参数

网友评论

请先 登录 再评论,若不是会员请先 注册