一、简介
*args 和 **kwargs 主要⽤于函数定义,你可以将不定数量的参数传递给⼀个函数。简单的来说就是:预先并不知道函数使⽤者会传递多少个参数给你, 所以在这个场景下使⽤这两个关键字。
*args 是⽤来发送⼀个⾮键值对的可变数量的参数列表给⼀个函数。
**kwargs 允许你将不定长度的键值对, 作为参数传递给⼀个函数。 如果你想要在⼀个函数⾥处理带名字的参数, 你应该使⽤**kwargs。
二、*args的是方法
*args是用来发送一个非键值对的可变数量的参数列表给一个函数。
举个例子
#!coding:utf8
def test_args(first_arg,*args):
print 'first args is :%s' % first_arg
for arg in args:
print 'anthoer arg is : %s' % arg
if __name__=='__main__':
# 测试*args的用法
test_args("python", "hadoop", "mongodb")
输出的结果如下:
first args is :python
anthoer arg is : hadoop
anthoer arg is : mongodb
三、**kwargs的用法
**kwargs 是将不定长度的键值对作为参数传递给一个函数。如果想要在一个函数处理带名字的参数,可以考虑使用**kwagrs
举个例子
#!coding:utf8
def test_kwargs(**kwargs):
for key,value in kwargs.items():
print '%s == %s' % (key,value)
if __name__=='__main__':
# 测试**kwargs的用法
test_kwargs(name="CSDN", user=" 小丶城丶故事")
输出结果如下:
name == CSDN
user == 小丶城丶故事
四、是*args和**kwargs调用函数
#!coding:utf8
def test_args_kwargs(arg1,arg2,arg3):
print 'arg1 : %s' % arg1
print 'arg2 : %s' % arg2
print 'arg3 : %s' % arg3
if __name__=='__main__':
# 使⽤ *args 和 **kwargs 来调⽤函数
args = ('csdn', 1, 2)
kwargs = {'arg1': '小丶城丶故事', 'arg2': 3, 'arg3': 4}
test_args_kwargs(*args)
test_args_kwargs(**kwargs)
输出结果:
arg1 : csdn
arg2 : 1
arg3 : 2
arg1 : 小丶城丶故事
arg2 : 3
arg3 : 4
五、标准参数和*args 、**kwargs在使用时的顺序
#!coding:utf8
def test_args_and_kwargs(f_args,*args,**kwargs):
print "first arg is : %s" % f_args
for arg in args:
print 'another arg is : %s ' % arg
for key,value in kwargs.items():
print '%s == %s' % (key,value)
if __name__=='__main__':
# 测试标准参数与*args、 **kwargs在使⽤时的顺序
test_args_and_kwargs("Hello", "csdn", "小丶城丶故事", name="csdn", user="小丶城丶故事")
结果如下:
first arg is : Hello
another arg is : csdn
another arg is : 小丶城丶故事
name == csdn
user == 小丶城丶故事