list1 = [1,2] def fun(x,y): print x,y fun(*list1) \\tuple和list能夠加個*來直接傳參,注意參數的個數要一直,注意傳多個參數的時候*必須放在賦值參數後面 list1 = [1,2] def fun(x,y,z): print x,y,z
dic1 = {'a':1,'b':2} \\注意,字典的key必定要和函數的形參一致 def fun(a,b): print a,b fun(**dic1)
def fun(x,*args,**kwargs): \\其中*args和**kwargs就是冗餘參數 print x print args print kwargs fun(1) ---------- 1 () {} 函數正常運行,不會報錯 fun(1,'a','b','c') ---------- 1 ('a', 'b', 'c') {} fun(1,'a','b','c',k1='v1',k2='v2') ---------- 1 ('a', 'b', 'c') {'k2': 'v2', 'k1': 'v1'}
多出的參數會放到args這個變量裏,多出的k-v參數會放到kwargs裏,注意,其中k不能和以前定義的參數重複,且不加引號,value須要加引號算法
通俗地講就是本身調用本身函數
注意,遞歸調用最後必須有默認結果,好比 if n==0 遞歸參數必須是向默認結果收斂的code
好比計算階乘遞歸
def fun(n): sum = 1 for i in range(1, n + 1): sum *= i return sum print fun(5) ---------- 120
def fun(n): if n == 0 : //這一個判斷可以使得當n=0的時候中止遞歸調用,防止出現死循環 return 1 else : return n * fun(n-1) print fun(5) ---------- 120