內置函數: continue... 傳送門 ...
內置函數:
—————————————————
# 匿名函數
# 為了解決一些簡單的需求⽽設計的一句話函數 不需要def來聲明 一句話就可以聲明一個函數
# 函數名 = lambda 參數: 返回值
1 # 例子 lambda 求和 求冪 2 a = lambda n : n**n # 可用變數a來代替函數名 正常調用 3 r = a(3) 4 print(r) 5 6 b = lambda n,m : n+m 7 re = b(3,2) 8 print(re) 9 10 # 求序列長度 11 long = lambda st : len(st) 12 st = '156161ddd' # st作為一個參數 13 re = long(st) # long調用st 14 print(re)
註意:
1. 函數的參數可有多個. 多個參數之間用逗號隔開
2. 匿名函數不管多複雜. 只能寫⼀⾏, 且邏輯結束後直接返回數據
3. 返回值和正常的函數⼀樣, 可以是任意數據類型
# sorted 排序函數.
# 語法: sorted(Iterable, key=None, reverse=False)
1 # 可直接對序列使用 2 lis = [1,3,5,8,9,45,12,34] 3 lis2 = sorted(lis) 4 print(lis2) # 返回的新列表是經過排序的 5 dic = {1:'A', 3:'C', 2:'B'} 6 print(sorted(dic)) # 字典直接使用返回的是排序後的key 7 8 # 和函數組合使用 9 lis = ['張三','114561',"李四1",'4414','趙五22222'] # 按字元長短排序 10 def func(s): 11 return len(s) 12 # 把列表中的每一個元素傳遞給func 根據func返回值進行排序 13 s = sorted(lis,key=func) 14 print(s) 15 # 和lambda組合使用 16 print(sorted(lis,key=lambda i:len(i))) 17 18 # 按年齡排序 19 lis = [{'id':1,'name':'lx','age':28}, 20 {'id':2,'name':'tab','age':58}, 21 {'id':3,'name':'tah','age':18}, 22 {'id':4,'name':'hei','age':38}] 23 24 def age(s): 25 return s['age'] 26 print(sorted(lis,key=age)) 27 # 組合lambda排序 28 print(sorted(lis,key=lambda dic:dic['age']))
# filter 篩選函數
# 語法: filter(function. Iterable)
# 把後面可迭代對象每一個元素交給前面的函數 根據函數返回的True 和 False進行篩選,判斷是否保留該元素
1 lis = ['313','sdads','3333','sss','deefa'] # 篩選長度大於3的 2 re = list(filter(lambda s:len(s)>3,lis)) # 註意用list迭代裝篩選出來的元素 3 print(re) 4 5 # 篩選>=38的 6 lis = [{'id':1,'name':'lx','age':28}, 7 {'id':2,'name':'tab','age':58}, 8 {'id':3,'name':'tah','age':18}, 9 {'id':4,'name':'hei','age':38}] 10 11 print(list(filter(lambda dic:dic['age']>=38,lis))) 12 13 # 註意篩選完後用 list 可迭代裝元素
# map 映射函數
# 語法: map(function, iterable)
# 把後面可迭代對象每一個元素交給前面的函數 保留執行結果
1 lis = [1,2,3,4,5,6,8] # 返回每個元素平方 2 re = map(lambda s:s**2,lis) 3 print(list(re)) 4 5 # 給出一個列表 正確的用戶名: alex 密碼:456 選出正確的 6 lis = ["alex_123", "alex_456", "wusir_123", "wusir_456", "alex_789"] 7 print(list(map(lambda s:s=='alex_456',lis))) 8 # 或者.split 分割成列表 9 print(list(map(lambda s: s.split("_")[0] == 'alex' and s.split("_")[1] == "456",lis)))
# 遞歸
# 在函數中 調用函數本身就是遞歸
1 # def func(): 2 # print("我是誰") 3 # func() 4 # func() # 會報錯 5 6 # 遞歸的應用:可以使用遞歸來遍歷各種樹形結構,比如我們的文件夾系統.可以使用遞歸來遍歷該文件夾中的所有文件 7 8 # 打開一個文件夾. 獲取到文件夾內的所有文件名 9 # 1. 打開一個文件夾 10 #.2. 判斷這個文件是否是文件夾 11 12 import os 13 def func(path): 14 lis = os.listdir(path) # 打開文件夾 列出文件夾所有內容(文件夾名) 15 for el in lis: # 當前文件夾內所有的文件名 16 file_real_path = os.path.join(path,el) # 拼接路徑 17 if os.path.isdir(file_real_path): # 判斷是否文件夾 18 print(el) 19 func(file_real_path) # 遞歸 重新執行上面的操作 20 else: # 不是文件夾是文件 21 print(el) 22 23 func("e:/a"
# 二分查找
# 二分查找.每次能夠排除掉一半的數據.查找的效率非常高.但是局限性較大.必須是有序序列才可以使用二分查找
# 要求:查找的序列必須是有序序列.
1 # 判斷n是否在列表中 2 lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963] 3 n = int(input("請輸入一個數字")) 4 left = 0 5 right = len(lst)-1 6 while left <= right: 7 z = (left + right) // 2 # 整除 找到中間索引位置 8 if n < lst[z]: 9 right = z-1 10 elif n > lst[z]: 11 left = z+1 12 else: 13 print("找到了!") 14 break 15 else: 16 print("沒有")