1.編寫裝飾器,為多個函數加上認證的功能(用戶的帳號密碼來源於文件)
要求登入成功一次,後續的函數都無需要在輸入用戶名和密碼
FLAG = Falsedef 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 == 'boss_gold' and password == '22222':
FLAG = True ret = func(*args,**kwargs) #func是被裝飾的函數 return ret
else:
print('登入失敗')
return inner
@logindef shoplist_add() :
print('增加的一件物品')
@logindef shoplist_del() :
print('刪除一件物品')
shoplist_add()
shoplist_del()
執行結果:
username : boss_gold
password : 22222
增加的一件物品
刪除一件物品
2.編寫裝飾器,為多個函數加上紀錄調用功能,要求每次調用函數都將
被調用的函數名稱寫入文件
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
@logdef shoplist_add() :
print('增加一件商品')
@logdef shoplist_del () :
print('刪除一件物品')
shoplist_add ()
運行結果:
增加一件商品
3.編寫下載網頁內容的函數,要求功能是:用戶傳人一個url,函數返回下載頁面的結果
為題目1編寫裝飾器,實現緩存網頁內容的功能:
具體內容: 實現下載的頁面存放於文件中,如果文件內有值(文件大小不為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) #grt() with open('web_cache','wb') as f:
f.write(b'***********'+ret)
return ret
return inner
@cachedef 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)
執行結果:
#網頁代碼
沒有留言:
張貼留言