原文出自: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)
结果:
1 |
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)
结果:
1 |
formal arg: 1another keyword arg: myarg2: twoanother keyword arg: myarg3: 3 |
在方法里使用 *args
和 **kwargs
1 |
<span class="k"><strong><span style="color:#000080;">def</span></strong></span> <span class="nf"><span style="color:#0000ff;">test_var_args_call</span></span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="n">arg3</span><span class="p">):</span> <span class="k"><strong><span style="color:#000080;">print</span></strong></span> <span class="s"><span style="color:#ba2121;">"arg1:"</span></span><span class="p">,</span> <span class="n">arg1</span> <span class="k"><strong><span style="color:#000080;">print</span></strong></span> <span class="s"><span style="color:#ba2121;">"arg2:"</span></span><span class="p">,</span> <span class="n">arg2</span> <span class="k"><strong><span style="color:#000080;">print</span></strong></span> <span class="s"><span style="color:#ba2121;">"arg3:"</span></span><span class="p">,</span> <span class="n">arg3</span><span class="n">args</span> <span class="o"><span style="color:#666666;">=</span></span> <span class="p">(</span><span class="mf"><span style="color:#666666;">1</span></span><span class="p">,</span> <span class="s"><span style="color:#ba2121;">"two"</span></span><span class="p">,</span> <span class="mf"><span style="color:#666666;">3</span></span><span class="p">)</span><span class="n">test_var_args_call</span><span class="p">(</span><span class="o"><span style="color:#666666;">*</span></span><span class="n">args</span><span class="p">)</span> |
结果:
1 |
arg1: 1arg2: twoarg3: 3 |
这个例子是讲如何在方法里调用字典:
1 |
<span class="k"><strong><span style="color:#000080;">def</span></strong></span> <span class="nf"><span style="color:#0000ff;">test_var_args_call</span></span><span class="p">(</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="p">,</span> <span class="n">arg3</span><span class="p">):</span> <span class="k"><strong><span style="color:#000080;">print</span></strong></span> <span class="s"><span style="color:#ba2121;">"arg1:"</span></span><span class="p">,</span> <span class="n">arg1</span> <span class="k"><strong><span style="color:#000080;">print</span></strong></span> <span class="s"><span style="color:#ba2121;">"arg2:"</span></span><span class="p">,</span> <span class="n">arg2</span> <span class="k"><strong><span style="color:#000080;">print</span></strong></span> <span class="s"><span style="color:#ba2121;">"arg3:"</span></span><span class="p">,</span> <span class="n">arg3</span><span class="n">kwargs</span> <span class="o"><span style="color:#666666;">=</span></span> <span class="p">{</span><span class="s"><span style="color:#ba2121;">"arg3"</span></span><span class="p">:</span> <span class="mf"><span style="color:#666666;">3</span></span><span class="p">,</span> <span class="s"><span style="color:#ba2121;">"arg2"</span></span><span class="p">:</span> <span class="s"><span style="color:#ba2121;">"two"</span></span><span class="p">,</span> <span class="s"><span style="color:#ba2121;">"arg1"</span></span><span class="p">:</span> <span class="mf"><span style="color:#666666;">1</span></span><span class="p">}</span><span class="n">test_var_args_call</span><span class="p">(</span><span class="o"><span style="color:#666666;">**</span></span><span class="n">kwargs</span><span class="p">)</span> |
Results:
1 |
arg1: 1arg2: twoarg3: 3 |
当然, 这些语法可以同时在python里面使用,但是我(作者)不建议这么做.
详见:Section 5.3.4 in the Python Reference Manual
参考:Core Python Programming, Second Edition, Section 11.6
自己的总结:
*args 传递多个普通参数
**kwargs 传递多个字典参数
评论关闭。