慎用變長參數
python支援可變長度的參數列表,可以通過*arg, **kwargs這兩個特殊文法來實現。以下為變長參數使用的例子:
* 使用*args 來實現可變參數列表: *args用接受
一個封裝為元組形式的參數列表來傳遞非關鍵字參數,參數個數可以隨意。
def SumFun(*args): result = 0 for x in args[0:]: result += x return resultprint SumFun(2, 4)print SumFun(1,2,3,4,5)print SumFun()
使用**kwargs接收字典形式的關鍵字參數列表,其中字典的索引值對分別表示不可變參數的參數名和值。
def category_table(**kwargs): for name, value in kwargs.items(): print '{0} is a kind of {1}'.format(name, value)category_table(apple='fruit', carrot='vegetable')category_table(BMW = 'Car') 一個函數中同時定義了普通參數,預設參數,以及上述兩種形式的可變參數,那麼使用方式又會是怎麼樣的呢。
def set_axis(x, y xlabel='x', ylable='y', *args, **kwargs): pass
在下列情境下適合使用可變參數
def mydecorator(fun): def new(*args, **kwargs): return fun(*args, **kwargs) return new
如果參數數目不確定,可以考慮使用變長參數。
用來實現函數的多態或者在繼承情況下子類需要調用父類的某些方法的時候。
class A(object): def somefun(self, p1, p2): passclass B(A): def myfun(self, p3, *args, **kwargs): super(B, self).somefun(*args, **kwargs)
本文摘自《編寫高品質代碼 改善python程式的91個建議》