您的位置:首页 > 编程语言 > Python开发

python11-28笔记(1.6-1.7)

2018-11-29 07:56 232 查看

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)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 笔记