python基礎 day14 裝飾器

2022-09-19 02:12:07 字數 3757 閱讀 3427

# 標準版裝飾器

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 ...