How to use *args and **kwargs in Python
时间:2010-03-08 来源:flyaway57
怎样在python中使用可变长的参数
在函数定义中,*args和**kwargs这种特殊的形式用来向函数传递可变数的参数。
一个星号的形式(*args)用来传递一个可变长度的tuple参数(非关键字可变长度的参数),两个星号的形式用来传递一个可变长度的字典参数。
下面是一个使用非关键字参数的形式。这个例子传递一个固定参数和两个变长参数。
def test_var_args(farg, *args):
for arg in args:
test_var_args(1, 'two', 3) |
<type 'tuple'> #从这里可以看出,这个可变参数(*args)的类型是tuple |
下面是使用关键字参数的形式。同样,传递一个固定参数和两个关键字变量参数
def test_var_kwargs(frag, **kwargs): print 'formal arg:', frag
for key in kwargs:
print 'another keyword arg: %s : %s' % (key, kwargs[key]) |
<type 'dict'> #从这里可以看出,这个可变参数(**kwargs)的类型是dict |
在调用函数时使用*args和**kwargs
这种特殊的语法,不仅仅可以在函数定义中使用,也可以在调用函数的时候使用
def test_var_args_call(arg1, arg2, arg3): |
结果:
arg1: 1 |
下面这个例子是在调用函数时使用关键字参数
def test_var_args_call(arg1, arg2, arg3): |
arg1: 1 |
下面是自己的总结:
args和kwargs这两个的名字是可以变化的
def test_var(**haha): |
<type 'dict'> #都是dict |
当然,args和kwargs可以一起使用
def test_args_kwargs(*args, **kwargs): |
1 |
但是,这两者的使用是有顺序的,即单星号在前,双星号在后。
def test_args_kwargs(*args, **kwargs):
test_args_kwargs(myarg3=3, 1, 'two') |
File "<stdin>", line 1 |