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