在python的函數中經常能看到輸入的參數前面有一個或者兩個星號:例如
def foo(param1, *param2):
def bar(param1, **param2):
這兩種用法其實都是用來將任意個數的參數導入到python函數中。
單星號(*):*agrs
將所以參數以元組(tuple)的形式導入:
例如:
>>> def foo(param1, *param2):
print param1
print param2
>>> foo(1,2,3,4,5)
1
(2, 3, 4, 5)
雙星號(**):**kwargs
將參數以字典的形式導入
>>> def bar(param1, **param2):
print param1
print param2
>>> bar(1,a=2,b=3)
1
{'a': 2, 'b': 3}
此外,單星號的另一個用法是解壓參數列表:
>>> def foo(bar, lee):
print bar, lee
>>> l = [1, 2]
>>> foo(*l)
1 2
當然這兩個用法可以同時出現在一個函數中:例如
>>> def foo(a, b=10, *args, **kwargs):
print a
print b
print args
print kwargs
>>> foo(1, 2, 3, 4, e=5, f=6, g=7)
1
2
3 4
{'e': 5, 'g': 7, 'f': 6}
參考資料: http://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-python-parameters