自學Python之路-Python基礎+模塊+面向對象
自學Python之路-Python網絡編程
自學Python之路-Python併發編程+數據庫+前端
自學Python之路-djangohtml
舉例1. 編寫裝飾器,爲多個函數加上認證的功能(用戶的帳號密碼來源於文件)
要求登陸成功一次,後續的函數都無需再輸入用戶名和密碼前端
FLAG = False def login(func): def inner(*args,**kwargs): global FLAG '''登陸程序''' if FLAG: ret = func(*args, **kwargs) # func是被裝飾的函數 return ret else: username = input('username : ') password = input('password : ') if username == 'carlos' and password == 'carlos88': FLAG = True ret = func(*args,**kwargs) #func是被裝飾的函數 return ret else: print('登陸失敗') return inner @login def shoplist_add(): print('增長一件物品') @login def shoplist_del(): print('刪除一件物品') shoplist_add() shoplist_del()
舉例2. 編寫裝飾器,爲多個函數加上記錄調用功能,要求每次調用函數都將被調用的函數名稱寫入文件web
def log(func): def inner(*args,**kwargs): with open('log','a',encoding='utf-8') as f: f.write(func.__name__+'\n') ret = func(*args,**kwargs) return ret return inner @log def shoplist_add(): print('增長一件物品') @log def shoplist_del(): print('刪除一件物品') shoplist_add() shoplist_del() shoplist_del() shoplist_del() shoplist_del() shoplist_del()
3. 編寫下載網頁內容的函數,要求功能是:用戶傳入一個url,函數返回下載頁面的結果數據庫
爲題目1編寫裝飾器,實現緩存網頁內容的功能:django
具體:實現下載的頁面存放於文件中,若是文件內有值(文件大小不爲0),就優先從文件中讀取網頁內容,不然,就去下載,而後存到文件中編程
import os from urllib.request import urlopen def cache(func): def inner(*args,**kwargs): if os.path.getsize('web_cache'): with open('web_cache','rb') as f: return f.read() ret = func(*args,**kwargs) #get() with open('web_cache','wb') as f: f.write(b'*********'+ret) return ret return inner @cache def get(url): code = urlopen(url).read() return code # {'網址':"文件名"} ret = get('http://www.baidu.com') print(ret) ret = get('http://www.baidu.com') print(ret) ret = get('http://www.baidu.com') print(ret)