# 標準版裝飾器
def inner(*args, **kwargs): # 傳入被裝飾的函式的引數
'''新增額外功能,執行被裝飾函式之前的操作'''
ret = f(*args, **kwargs) # 執行被裝飾的函式,並獲取被裝飾函式的返回值
'''新增額外功能,執行被裝飾函式之後的操作'''
return ret
return inner
def func():
pass
func()
1.我們給這個測試函式加乙個裝飾器,計算執行這個函式需要的時間
# step1:
import time
def test_func(): # 這是需要被裝飾的函式
time.sleep(1)
print('this is a test function')
# 我們給這個測試函式加乙個裝飾器,計算執行這個函式需要的時間
start_time = time.time()
f()end_time = time.time()
print(end_time - start_time)
# 但是裝飾器要符合開放封閉原則,並且被裝飾函式的呼叫方式也改變了
2.使用閉包,實現開放封閉原則
# step2:
import time
def test_func(): # 這是需要被裝飾的函式
time.sleep(1)
print('this is a test function')
# 使用閉包,實現開放封閉原則
def inner():
start_time = time.time()
f()end_time = time.time()
print(end_time - start_time)
return inner
test_func() # 實際上就是執行inner()
3.python 進行了優化,這裡可以這樣寫
# step3:
import time
# 使用閉包,實現開放封閉原則
def inner():
start_time = time.time()
f()end_time = time.time()
print(end_time - start_time)
return inner
def test_func(): # 這是需要被裝飾的函式
time.sleep(1)
print('this is a test function')
test_func() # 實際上就是執行inner()
4.當被裝飾函式有返回值時,要在inner函式中返回被裝飾函式的返回值
# step4:被裝飾函式有返回值時,要在inner函式中返回被裝飾函式的返回值
import time
# 使用閉包,實現開放封閉原則
# f = test_func
def inner():
start_time = time.time()
ret = f()
end_time = time.time()
print(end_time - start_time)
return ret
return inner
def test_func(): # 這是需要被裝飾的函式
time.sleep(1)
print('this is a test function')
return 'aloha'
result = test_func() # 實際上就是執行inner()
print(result)
5.當被裝飾函式需要傳入引數時,要在inner函式中傳入對應的引數
# step5:被裝飾函式需要傳入引數時,要在inner函式中傳入對應的引數
import time
# 使用閉包,實現開放封閉原則
# f = test_func
def inner(*args, **kwargs):
start_time = time.time()
ret = f(*args, **kwargs)
end_time = time.time()
print(end_time - start_time)
return ret
return inner
def test_func(name, age): # 這是需要被裝飾的函式
time.sleep(1)
print('this is a test function')
info = f'我叫, 今年'
return 'aloha', info
result = test_func('jason', 18) # 實際上就是執行inner()
print(result)
登入認證系統
# 簡單模擬登入系統
# 在訪問文章,**,檔案之前,需要登入賬號密碼
login_status =
def get_user_password(): # 獲取賬號密碼檔案
user_dic = dict()
with open('user.txt', 'r', encoding='utf-8') as f1:
for line in f1:
line_list = line.strip().split('|')
user_dic.update()
return user_dic
def login(): # 使用者登入(三次機會)
user_dic = get_user_password()
count = 0
while count < 3:
username = input("請輸入賬戶名:").strip()
password = input("請輸入密碼:").strip()
if username in user_dic and user_dic[username] == password:
print(f'你好,歡迎登入')
login_status['username'] = username
login_status['status'] = true
break
else:
print('賬號或密碼錯誤')
count += 1
def auth(f): # 登入認證的裝飾器
def inner(*args, **kwargs):
if login_status['status']:
ret = f(*args, **kwargs)
return ret
else:
login()
ret = f(*args, **kwargs)
return ret
return inner
@auth
def article():
@auth
def photo():
@auth
def file():
article()
photo()
file()
python基礎day 14 異常捕獲
語法一 try 段1 需要捕獲異常的 段 except 段2 出現異常後才會執行的 段 執行過程 先執行 段1,如果沒有出現異常,就不執行 段2,直接執行後面的其它語句 如果出現異常,程式不會崩潰,會馬上執行 段2,執行完後再執行後面的其它語句 try age int input 請輸入年齡 exc...
C 基礎程式設計DAY14
百錢買百雞問題 雞翁一值錢五,雞母一值錢三,雞雛三值錢一,百錢買百雞,問雞翁 母 雛各幾何?include include include using namespace std int main end time clock cout time clock endl system pause re...
python成長之路day14
1 什麼是裝飾器 器指的是工具 裝飾指的是為被裝飾物件新增額外的功能 大白話 定義裝飾器就是定義了乙個函式,該函式就是用來為其他函式新增額外的功能 2 為何要用裝飾器 程式的開發徐亞哦遵循乙個原則 開放封閉原則 開放 值得是對拓展功能開放 封閉 指的是對修改源 封閉 def func sdfasd ...