如何在python中使用*args,**kwargs (How to use *args and **kwargs in Python)

原文出自:How to use *args and **kwargs in Python

作者:Sofeng

一次公司的交流会上,讨论了这个问题,为加深映像和锻炼英语,将原文翻译了下!

如何在python中使用可变长度的参数.

这个特殊的语法, *args and **kwargs 在一个方法中,是为了传递多个可变的参数。单个星号的形式(*args)是为了传递一个可变长度的list数据,而双星的形式(**kwargs) 是为了传递多个可变的字典数据。这里有个例子讲了如何使用这些参数. 这个例子,传递一个确定的参数,和多个可变长度的参数:

def test_var_args(farg, *args):
print “formal arg:”, farg
for arg in args:
print “another arg:”, arg

test_var_args(1, “two”, 3)

结果:

formal arg: 1another arg: twoanother arg: 3

这个例子是讲如何传递一个可变字典, 一个确定参数和多个可变字典参数

def test_var_kwargs(farg, **kwargs):
print “formal arg:”, farg
for key in kwargs:
print “another keyword arg: %s: %s % (key, kwargs[key])

test_var_kwargs(farg=1, myarg2=“two”, myarg3=3)

结果:

formal arg: 1another keyword arg: myarg2: twoanother keyword arg: myarg3: 3

在方法里使用 *args**kwargs

def test_var_args_call(arg1, arg2, arg3):    print "arg1:", arg1    print "arg2:", arg2    print "arg3:", arg3args = (1, "two", 3)test_var_args_call(*args)

结果:

arg1: 1arg2: twoarg3: 3

这个例子是讲如何在方法里调用字典:

def test_var_args_call(arg1, arg2, arg3):    print "arg1:", arg1    print "arg2:", arg2    print "arg3:", arg3kwargs = {"arg3": 3, "arg2": "two", "arg1": 1}test_var_args_call(**kwargs)

Results:

arg1: 1arg2: twoarg3: 3

当然, 这些语法可以同时在python里面使用,但是我(作者)不建议这么做.

详见:Section 5.3.4 in the Python Reference Manual

参考:Core Python Programming, Second Edition, Section 11.6

自己的总结:

*args 传递多个普通参数

**kwargs 传递多个字典参数

评论关闭。