python11-28筆記(1.6-1.7)

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章