1. 程式人生 > >裝飾器練習

裝飾器練習

輸入 req pan rom **kwargs utf-8 get per get()

1、編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,後續的函數都無需再輸入用戶名和密碼

 1 Juge=False
 2 def Certification(func):
 3     def inner(*args,**kwargs):
 4         global Juge
 5         if Juge:
 6             ret = func(*args, **kwargs)
 7             return ret
 8         else:
 9             username = input("
username:") 10 password = input("password:") 11 if username == "xiaoming" and password == "110000": 12 Juge = True 13 ret = func(*args, **kwargs) 14 return ret 15 else: 16 print("登陸失敗") 17 return inner

2、編寫裝飾器,為多個函數加上記錄調用功能,要求每次調用函數都將被調用的函數名稱寫入文件

1 def wrapper(func):
2     def inner(*args,**kwargs):
3         with open("執行庫","a+",encoding="utf-8") as f:
4             f.write(func.__name__+\n)
5         ret=func(*args,**kwargs)
6         return ret
7     return inner

3、編寫下載網頁內容的函數,要求功能是:用戶傳入一個url,函數返回下載頁面的結果,實現下載的頁面存放於文件中,如果文件內有值(文件大小不為0),就優先從文件中讀取網頁內容,否則,就去下載,然後存到文件中

 1 import os
 2 from urllib.request import urlopen
 3 def cache(func):
 4     def inner(*args,**kwargs):
 5         if os.path.getsize(web_cache):
 6             with open(web_cache,rb) as f:
 7                 return f.read()
 8         ret = func(*args,**kwargs)  #get()
 9         with open(web_cache,wb) as f:
10             f.write(b*********+ret)
11         return ret
12     return inner

裝飾器練習