In [1]:
# *args 代表不確定數量的 non-keyword arg
# 這個語法的重點是 *,後面可以接任何名稱,例如 *dummy 也代表參數群
def f1(*args):
    for x in args:
        print x

In [2]:
f1('hello', 'my', 'world')


hello
my
world

In [3]:
f1('hello', y = 'my', 'world')  # 只有 *args 卻指定參數名稱,會造成錯誤


  File "<ipython-input-3-1df0719e213d>", line 1
    f1('hello', y = 'my', 'world')  # 只有 *args 卻指定參數名稱,會造成錯誤
SyntaxError: non-keyword arg after keyword arg

In [4]:
# **kwargs 代表不確定數量的 keyword arg
# 語法的重點是 **,後面名稱可以改成 **dummy
def f2(**kwargs):
    for x in kwargs:
        print x, kwargs[x]

In [5]:
f2(x = 1, y = "hello", z = [1, 2, 3])


y hello
x 1
z [1, 2, 3]

In [6]:
f2("good", x = 3)  # 只有 **kwargs 卻沒有指定參數名稱,會造成錯誤


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-cf7dc25fa101> in <module>()
----> 1 f2("good", x = 3)  # 只有 **kwargs 卻沒有指定參數名稱,會造成錯誤

TypeError: f2() takes exactly 0 arguments (2 given)

In [7]:
def f3(*args, **kws):
    for x in args:
        print "[] = ", x
    for x in kws:
        print "[", x, "] = ", kws[x]

In [8]:
f3('hello', z = 54, g = [1, 3], 'my word')  # non-keyword arg 要放前面


  File "<ipython-input-8-2fc214e60111>", line 1
    f3('hello', z = 54, g = [1, 3], 'my word')  # non-keyword arg 要放前面
SyntaxError: non-keyword arg after keyword arg

In [9]:
f3('hello', 'my world', x = 43, z = [1, 4])


[] =  hello
[] =  my world
[ x ] =  43
[ z ] =  [1, 4]

In [ ]: