大作業day04
阿新 • • 發佈:2018-11-07
1、整理裝飾器的形成過程,背誦裝飾器的固定格式
固定格式 def wrapper(func): 2.傳入函式值f def inner(*args, **kwargs): #執行函式前進行的操作 ret = func(*args,**kwargs) # 5.執行f()函式 #執行函式後進行的操作 return ret # 6.返回一個值給函式呼叫者 inner函式名的id return inner # 4.通過return把返回值給函式呼叫者 此時f = inner @wrapper # 1.f = wrapper(f)執行wrapper函式 def f(): print(666) f() 3.執行inner函式 f() = inner() 注意:return用法 1.函式遇到return時函式體結束 2.如果return後面跟上函式名則返回函式名在記憶體中的id 3.如果return後面跟上其他字元則返回其本身
2、編寫裝飾器,在每次執行被裝飾函式之前列印一句’每次執行被裝飾函式之前都得先經過這裡,這裡根據需求新增程式碼
def func1(f): def inner(): print('每次執行被裝飾函式之前都得先經過這裡,這裡根據需求新增程式碼') f() return inner @func1 def func2(): print('hello world') func2()
3、編寫裝飾器,在每次執行被裝飾函式之後列印一句’每次執行完被裝飾函式之後都得先經過這裡,這裡根據需求新增程式碼
def func1(f): def inner(): f() print('每次執行被裝飾函式之後都得先經過這裡,這裡根據需求新增程式碼') return inner @func1 def func2(): print('hello world') func2()
4、編寫裝飾器,在每次執行被裝飾函式之前讓使用者輸入使用者名稱,密碼,給使用者三次機會,登入成功之後,才能訪問該函式.
def func2(f): def innter(): a = 1 while a <= 3: username = input('請輸入使用者名稱') password = input('請輸入密碼') if username == 'jinyuan' and password == '123': f() break else: print('賬號密碼錯誤你還有{}次機會'.format(3-a)) a += 1 continue return innter @func2 def func1(): print('登入成功') func1()
5、編寫裝飾器,為多個函式加上認證的功能(使用者的賬號密碼來源於檔案,只支援單使用者的賬號密碼,給使用者三次機會),
要求登入成功一次,後續的函式都無需再輸入使用者名稱和密碼
dic = { 'name':None, 'status' : False } def func1(f): def inner(*args,**kwargs): num = 0 while num < 3: if dic['status']: ret = f(*args,**kwargs) return ret else: username = input('請輸入使用者名稱') password = input('請輸入密碼') f1 = open('test.txt',encoding='utf-8') for i in f1: new_list = i.strip().split() if username == new_list[0] and password == new_list[1]: dic['status'] = True break else: num += 1 print('輸入使用者名稱或密碼錯誤還有{}次機會'.format(3-num)) continue return inner @func1 def func4(): print('登入成功') func4()
6,給每個函式寫一個記錄日誌的功能,
功能要求:每一次呼叫函式之前,要將函式名稱,時間節點記錄到log的日誌中。
所需模組:
import time
struct_time = time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time))
import time def wapper(f): def inner(*args,**kwargs): struct_time = time.localtime() time_log = time.strftime("%Y-%m-%d %H:%M:%S",struct_time) f1 = open('log1.txt',encoding='utf-8',mode='a') f1.write(time_log+'\t') f1.write(str(f)+'\n') f(*args,**kwargs) return inner @wapper def func1(*args,**kwargs): print('hello world') func1('aa','bbb')