1.6 多类型传值和冗余参数 多类型传值: 比如def fun(x,y),定义2个形参 定义一个元组t=(1,2),如果把元组当做实参传入到函数中,会报错

如何将元组当做不同类型的参数传入到函数中 fun(*t) 代表传入的是元组或者这样调用 fun((1,2)) 注意实参的个数要和形参一致,但是不能这样传入 fun(*t,1) 这样会语法错误 也可以这样传参 fun(x=1,y=2),但是要和形参定义的名字一致

字典传参 dic={"x":1,"y":2,"z":3} fun(dic) "" 代表传入的参数是字典类型

错误 dic={'a':1,'n':2,'c':3} fun(**dic) 这样传参也是错误的 字典的key值必须和函数形参定义的一致

冗余参数:(处理多余实参) 有时候传入实参的时候传入了更多的参数,需要处理。 def fun(x,*args,**kwargs): x是命名参数 后面2个可以不传入实参 In [26]: fun(2,2) 2 (2,) 第二个参数传入 {}

In [27]: fun(2,2,y=2) 第三个参数传入字典的key和value 2 (2,) {'y': 2}

总结,冗余参数会传到元组里,默认参数(y=xx,c=xx)会传到字典里,或者直接用**dic传入字典

#!/usr/bin/python #coding:utf-8 import os x='/proc/' def fun(x): if x.isdigit(): return True return False def meminfo(y): pwd= x+y+'/status'#获取进程文件的路径 with open(pwd) as damem: for p_da in damem:#对每个进程内存累加并得出总内存和占比 if p_da.startswith('VmRSS'): p_mem = p_da.split()[1] p_mem = float(p_mem) return p_mem

for i in os.listdir(x): if fun(i): if meminfo(i) > 0: print '进程号:%s 占用内存:%s k'%(i, meminfo(i))

1.7 函数的递归调用 定义函数的时候,在函数体内调用自身叫做递归,通常用作阶乘计算,也可以用循环来实现

循环实现: #!/usr/bin/python def factorial(n): sum=1 for i in range(1,n+1): sum *=i return sum

print factorial(5)

递归调用有一个前提,不能一直无限调用下去,必须有一个结束递归的条件 递归调用 def factorial(n): if n == 0: return 1 else: return n * factorial(n-1)

print factorial(5)

必须有最后的默认结果 if n == 0 递归参数必须向默认结果收敛的: factorial(n-1)