目錄python
def f1(): x = 10 def f2(): print(x) # 10 x = 1000 f1() # 10 print(x) # 1000
def f1(): x = 10 def f2(): print(x) # 10 return f2 f = f1() # f2 f() # f2()
def f1(x): def f2(): print(x) # 10 return f2 f3 = f1(10) # f2 f3() # f2() # 10 f3() # 10 f3() # 10 f4 = f1(5) f4() # 5 f4() # 5
def f1(x): def f2(): print(x) # 10 return f2 f2 = f1() f2() # f2()
def login_deco(func): def wrapper(*args,**kwargs): login_judge = login() if login_judge: res = func(*args,**kwargs) return res return wrapper @login_deco def shopping(): pass # shopping = deco(shopping) # shopping()
def sanceng(x,y): def login_deco(func): print(x,y) def wrapper(*args,**kwargs): login_judge = login() if login_judge: res = func(*args,**kwargs) return res return wrapper return login_deco @sanceng(10,20) def shopping(): pass day20 # shopping = login_deco(shopping) # shopping()
自定義的迭代器,函數內部使用yield關鍵,有yield關鍵字的函數只要調用,這個調用後的函數就是生成器編程
def f1(): yield 1 g = f1() # 變成生成器 for i in g: print(i) # 1
遞歸本質上就是函數調用函數自己,必須得有結束條件,而且在遞歸的過程當中,問題的規模必須都不斷縮小閉包
def find_num(num,lis): if len(lis) == 1 and lis[0] != num: print('沒找到') return mid_ind = int(len(lis) / 2) # 中間索引 mid_num = lis[mid_ind] # 中間值 if num < mid_num: lis = lis[:mid_ind] find_num(num,lis) elif num > mid_num: lis = lis[mid_ind + 1:] find_num(num, lis) else: print('find') lis = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] find_num(20,lis)
lamdbda 參數 : 邏輯代碼
app
max(dic,key=lambda name: dic[name]) max(dic) max(lis/se/tup)
相似於工廠的流水線,機械式的一步一步完成一個項目,把完成步驟具體細分,這樣步驟與步驟之間互不干涉函數
缺點:擴展性差,只要有一個步驟斷了,項目就崩潰了
優勢:清晰優雅code