原文出自: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 传递多个字典参数
评论关闭。