1.閉包函數必須在函數內部定義 2.閉包函數能夠引用外層函數的名字 閉包函數是 函數嵌套、函數對象、名稱空間與做用域 結合體。
直接調用閉包
# def func(x): # print(x) # func(1010)
經過閉包函數傳參app
# def outer(number): # print(number) # def inner(): # print(number) # return inner # # func = outer(100) # func()
直接傳入地址,爬取小哥哥的博客ide
# import requests # def spider_func(url): # response = requests.get(url) # if response.status_code == 200: # print(len(response.text)) # print(response.text) # url = 'https://www.cnblogs.com/zhulipeng-1998/' # spider_func(url)
經過閉包傳入地址,爬取小哥哥博客函數
# import time # import requests # def spider_outer(url): # def spider_inner(): # start_time = time.time() # response = requests.get(url) # end_time = time.time() # if response.status_code == 200: # print(f'爬取須要的時間{end_time - start_time}') # print(len(response.text)) # print(response.text) # return spider_inner # spider_jingdong = spider_outer('https://www.cnblogs.com/zhulipeng-1998/') # spider_jingdong()
試着讓用戶輸入網址爬出內容,沒有成功url
import time import requests def spider_outer(url): def spider_inner(): start_time = time.time() response = requests.get(url) end_time = time.time() if response.status_code == 200: print(f'爬取須要的時間{end_time - start_time}') print(len(response.text)) print(response.text) return spider_inner chioce = input('請輸入爬取網址:') spider_chioce = spider_outer('chioce') spider_chioce()
不修改被裝飾對象的源代碼 不修改被裝飾對象的調用方式
閉包傳入,添加計時功能code
# import time # # def time_record(func): # start_time = time.time() # func() # end_time = time.time() # print(f'下載電影消耗的時間{end_time - start_time}') # return '蒼天老師的大片' # def download_movie(): # print('開始下載電影....') # time.sleep(5) # print('電影下載成功...') # return # res = time_record(download_movie) # for i in res: # print(i)
初級裝飾器,無返回值對象
# import time # def download_movie(name): # print('開始下載電影.....') # time.sleep(3) # print('電影下載成功.....') # return f'{name}救援隊高清無碼.mp4' # # def time_record(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 = time_record(download_movie) # download_movie(name='nick')
有返回值,可是沒有接收到,打印了res,不知道對不對blog
# import time # def download_movie(): # print('開始下載電影.....') # time.sleep(3) # print('電影下載成功.....') # return '救援隊高清無碼.mp4' # # def time_record(func): # def inner(*args, **kwargs): # start_time = time.time() # res = func(*args, **kwargs) # print(res) # end_time = time.time() # print(f'下載消耗時間{end_time - start_time}') # return res # return inner # # download_movie = time_record(download_movie) # download_movie()
最終版本ip
# def wrapper(func): # def inner(*args,**kwargs): # username = input('請輸入名字') # if username == 'dsb': # res = func(*args,**kwargs) # return res # # else: # print('用戶權限不足') # return inner # # def func1(): # pass # # func1 = wrapper(func1) # func1() ### def wrapper(func): def inner(*args,**kwargs): res = func(*args,**kwargs) return res return inner
魔法糖
import time '''def wrapper(func): def inner(*args,**kwargs): res = func(*args, **kwargs) return res return inner @wrapper def func1(): pass def func2(): pass func1()'''