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-8import osx='/proc/'def fun(x):if x.isdigit():return Truereturn Falsedef 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_memfor i in os.listdir(x):
if fun(i):if meminfo(i) > 0:print '进程号:%s 占用内存:%s k'%(i, meminfo(i))1.7 函数的递归调用
定义函数的时候,在函数体内调用自身叫做递归,通常用作阶乘计算,也可以用循环来实现循环实现:
#!/usr/bin/pythondef factorial(n):sum=1for i in range(1,n+1):sum *=ireturn sumprint factorial(5)
递归调用有一个前提,不能一直无限调用下去,必须有一个结束递归的条件
递归调用def factorial(n):if n == 0:return 1else:return n * factorial(n-1)print factorial(5)
必须有最后的默认结果
if n == 0递归参数必须向默认结果收敛的:factorial(n-1)
精彩评论