django中的*args 与 **kwargs使用介绍
这是Python函数可变参数args及kwargs
*args表示任何多个无名参数,它是一个tuple
**kwargs表示关键字参数,它是一个dict
测试代码如下:
deffoo(*args,**kwargs):print'args=',argsprint'kwargs=',kwargsprint'**********************'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,'c':3,'b':2}********************** args=(1,2,3)kwargs={'a':1,'c':3,'b':2}********************** args=(1,'b','c')kwargs={'a':1,'c':'c','b':'b'}**********************
补充:Python中的**kwargs和*args这么理解
Python中经常看到**kwargs和*args这么两个参数,例如下面groupby的参数。
到底是什么意思呢?
怎么使用?
DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False,**kwargs)
**kwargs和*args意思
*args和**kwargs一般是用在函数定义的时候。二者的意义是允许定义的函数接受任意数目的参数。也就是说我们在函数被调用前并不知道也不限制将来函数可以接收的参数数量。在这种情况下我们可以使用*args和**kwargs。
*args的使用
*args用来表示函数接收可变长度的非关键字参数列表作为函数的输入。我们可以通过以下这个例子来进一步理解*args。
deftest_args(normal_arg,*args): print("firstnormalarg:"+normal_arg) forarginargs: print("anotherargthrough*args:"+arg) test_args("normal","python","java","C#")
上面代码的执行结果如下:
firstnormalarg:normal anotherargthrough*args:python anotherargthrough*args:java anotherargthrough*args:C#
**kwargs的使用
**kwargs表示函数接收可变长度的关键字参数字典作为函数的输入。当我们需要函数接收带关键字的参数作为输入的时候,应当使用**kwargs。我们可以通过以下这个例子来进一步理解**kwargs。
deftest_kwargs(**kwargs): ifkwargsisnotNone: forkey,valueinkwargs.iteritems(): print("{}={}".format(key,value)) #Oryoucanvisitkwargslikeadict()object #forkeyinkwargs: #print("{}={}".format(key,kwargs[key])) test_kwargs(name="python",value="5")
以上代码的执行结果如下:
name=python value=5
以上例子只是*args和**kwargs的基本的使用例子。下面再给出一个用*args和**kwargs来定义能够接收列表输入和字典输入的函数的例子。
使用*args和**kwargs来调用函数
比如我们有如下接收普通输入参数的函数:
defnormal_func(arg1,arg2,arg3): print("arg1:"+arg1) print("arg2:"+arg2) print("arg3:"+arg3) normal_func("python",1,3)
使用*args和**kwargs来调用这个函数的代码如下:
#使用*args args_list=("python",1,3) normal_func(*args_list) #使用**kwargs kwargs_dict={"arg3":3,"arg1":"python","arg2":1} normal_func(**kwargs_dict)
以上三段代码的输出均为:
arg1:python arg2:1 arg3:3
汇总
*args和**kwargs都指定义函数时其内部参数数量问题,不指定具体数量,依据使用时具体情况而临场确定数量。
*args针对非关键字参数,**kwargs针对关键字参数。
不仅在定义函数时有空,并且可以作为函数实际调用时作为参数使用。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。