內建函式拓展,遞迴函式
1. lambda匿名函式
lambda 就是為了解決一些簡單的需求而設定的一句話函式
舉例:
計算一個數的平方:
用函式寫:def func(n):
return n*n
用匿名函式寫:f = lanbda n: n*n
語法:函式名 = lambda 引數: 函式體
注意:
1. 函式的引數可以有多個. 多個引數之間用逗號隔開
2. 匿名函式不管多複雜. 只能寫一行, 且邏輯結束後直接返回資料
3. 返回值和正常的函式一樣, 可以是任意資料型別
2. sorted()
排序函式.
語法: sorted(Iterable, key=None, reverse=False)
lterable 可以迭代的物件
key 排序規則,可以用函式寫,也可以用匿名函式寫.根據自己具體需要排序的要求
reverse 是否需要倒序,如果寫True,預設是False
舉例:lst = [1,5,6,9,2,3,8]
lst2= sorted(lst) #列印結果是 1,2,3,5,6,8,9
3. filter()
語法: filter(function. Iterable)
function: 用來篩選的函式. 在filter中會自動動的把iterable中的元素傳遞給function. 然後
根據function返回的True或者False來判斷是否保留此項資料
lterable:可迭代物件
lst = [1,2,3,4,5,6,7]
ll = filter(lambda x: x%2==0, lst) # 篩選所有的偶數
print(ll) #直接列印是記憶體地址
print(list(ll)) #[2,4,6]
4. map()
對映函式
語法: map(function, iterable) 可以對可迭代物件中的每一個元素進行對映. 分別取執值function
舉例:
def func(e):
return e*e
mp = map(func, [1, 2, 3, 4, 5])
print(mp) #執行也是一串記憶體地址
print(list(mp)) #裝進列表後每一個元素的平方
5. 遞迴函式
遞迴函式的本意就是函式就是函式裡面呼叫本身
注意要有檔案的入口以及出口,如果一直呼叫的話,會進行死迴圈,並且到達pycharm深度後會報錯.
舉例:
import os
def read(filepath, n):
files = os.listdir(filepath) # 獲取到當前資料夾中的所有檔案
for fi in files: # 遍歷資料夾中的檔案, 這裡獲取的只是本層⽂檔名
fi_d = os.path.join(filepath,fi) # 加入資料夾 獲取到資料夾+檔案
if os.path.isdir(fi_d): # 如果該路徑下的檔案是資料夾
print("\t"*n, fi)
return read(fi_d, n+1) # 繼續進行相同的操作
else:
print("\t"*n, fi) # 遞迴出口. 最終在這裡隱含著return
read('../oldboy/', 0) #遞迴遍歷檔案下的所有檔名