1、閉包函數緩存
一、什麼是閉包函數閉包
閉:封閉ide
包:包裹函數
## 一、閉包函數必須在函數內部定義工具
##二、閉包函數能夠引用外層函數的名字性能
二、閉包函數結構測試
def outer(x): def inner(): print(x) return inner inner = outer(2) inner()
三、傳參方式網站
3.一、直接傳參url
3.二、閉包傳參spa
四、閉包函數的應用
#需求:爬取某個網站,打印獲取數據的長度
#方法一: 直接傳參 import requests def spider_func(url): response = requests.get(url) #發送地址請求指令,獲取響應數據 if response.status_code == 200: # 判斷狀態碼,200表示訪問狀態成功 # print(response.text) #獲取數據文本 print(len(response.text)) #統計數據長度 url = 'https://www.baidu.com/' spider_func(url) #方法二:經過閉包函數接收url地址,執行爬取數據 import requests def spider_func(url): def inner(): response = requests.get(url) if response.status_code == 200: print(len(response.text)) return inner baidu = spider_func('https://www.baidu.com/') baidu()
2、裝飾器
1.一、什麼是裝飾器
裝飾:裝飾,修飾
器:工具
裝飾的工具。
***** 開放:對函數功能的添加是開放的。
封閉:對函數功能的修改是封閉的。
1.二、做用
在不修改被裝飾對象的 源代碼 和 調用方式 的前提下,添加新的功能。
1.三、定義必須遵循
不修改被裝飾對象的源代碼。
不修改被裝飾對象的調用方式。
1.四、爲何使用閉包函數
能夠解決代碼的冗餘,提升代碼的可擴展性。
1.五、使用
應用:統計時間, 登陸認證,插入日誌,性能測試,事物處理,緩存,權限校驗等。
例:需求:
統計下載電影的時間
import time def download_movie(*args,**kwargs): print('開始下載電影...') time.sleep(3) print('電影下載成功') return 123 def outer(f): #f = download_movie def inner(*args,**kwargs): star_time = time.time() res = f(*args,**kwargs) #f(*args,**kwargs)----> download_movie(*args,**kwargs) end_time = time.time() print(f'消耗時間爲:{end_time - star_time}') return res return inner download_movie = outer(download_movie) download_movie()
二、裝飾器語法糖
@:裝飾器的語法糖
注意: 在使用裝飾器語法糖時,裝飾器必須定義在被裝飾對象之上。
例:
import time def outer(func): #被裝飾對象 def inner(*args,**kwargs): #被裝飾對象的函數 start_time = time.time() res = func(*args, **kwargs) end_time = time.time() print(f'消耗時間:{end_time - start_time}') return res return inner # download_movie = outer(download_movie) # download_movie() @outer def download_movie(): print('開始下載電影...') time.sleep(3) print('電影下載成功') return 123 download_movie()