1. 程式人生 > >內建函式拓展,遞迴函式

內建函式拓展,遞迴函式

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)       #遞迴遍歷檔案下的所有檔名