本文摘自php中文网,作者巴扎黑,侵删。
*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。1 2 3 4 5 6 7 8 9 | def fun( * args, * * kwargs):
print 'args = ' , args
print 'kwargs = ' , kwargs
print '###'
if __name__ = = '__main__' :
foo( 1 , 2 , 3 , 4 )
foo(a = 1 ,b = 2 ,c = 3 )
foo( 1 , 2 , 3 , 4 , a = 1 ,b = 2 ,c = 3 )
foo( 'a' , 1 , None , a = 1 , b = '2' , c = 3 )
|
输出结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 | args = (1, 2, 3, 4)
kwargs = {}
args = ()
kwargs = { 'a' : 1, 'c' : 3, 'b' : 2}
args = (1, 2, 3, 4)
kwargs = { 'a' : 1, 'c' : 3, 'b' : 2}
args = ( 'a' , 1, None)
kwargs = { 'a' : 1, 'c' : 3, 'b' : '2' }
|
可以看到,这两个是python中的可变参数。
注意:同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。
1 2 3 4 5 6 | def fun2(param1, * args, * * kwargs):
print 'param1 = ' , param1
print 'args = ' , args
print 'kwargs = ' , kwargs
print '###'
fun2( 1 , 2 , 3 , 4 , a = 1 ,b = 2 ,c = 3 )
|
输出结果:
1 2 3 4 | param1 = 1
args = (2,3,4)
kwargs = { 'a' : 1, 'c' : 3, 'b' : 2}
|
1赋值给了param1, 剩下的2,3,4给了*args, 其他的都赋值给了**kwargs
还有一个很漂亮的用法,就是创建字典:
1 2 3 | def kw_dict( * * kwargs):
return kwargs
print kw_dict(a = 1 ,b = 2 ,c = 3 )
|
结果:
其实python中就带有dict类,使用dict(a=1,b=2,c=3)即可创建一个字典了。
以上就是比较讲解Python中的*args和 **kwargs用法的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python中*的用法介绍(代码示例)
Python中日期和时间格式化输出的方法小结_Python
Python爬虫防止ip被封的方法
Python中sqrt是什么意思
推荐几本关于的Python好书
Python tuple什么意思
Python中filecmp的简单使用
Python中的排序操作和heapq模块的介绍(代码示例)
Python的输入来源包括文件输入吗
Python怎么判断数据类型
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 比较讲解Python中的*args和 **kwargs用法